码迷,mamicode.com
首页 > Web开发 > 详细

.net上传图片实例

时间:2016-06-01 23:06:16      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:

前台代码:
<asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="Button2" runat="server" Text="Butto2n" OnClick="Button2_Click" />
后台代码:
protected void Button2_Click(object sender, EventArgs e)
{
  if (FileUpload1.HasFiles) {
    byte[] pbyte = FileUpload1.FileBytes;
    string type = FileUpload1.PostedFile.ContentType;
    //验证输入图像尺寸
    byte
[] newPbyte = ValidatePicture(pbyte, type);
    //保存图片 第一个参数为图片名字,如果图片存在数据里面那么就可以以图片id来指定命名如101.jpeg
    SavePictureInImageServer(
101, newPbyte, type); } }

public void SavePictureInImageServer(int pictureId, byte[] pictureBinary, string mimeType)
{
  string[] parts = mimeType.Split(‘/‘);
  string lastPart = parts[parts.Length - 1];
  switch (lastPart)
  {
    case "pjpeg":
    lastPart = "jpg";
    break;
    case "x-png":
    lastPart = "png";
    break;
    case "x-icon":
    lastPart = "ico";
    break;
  }

//图片名称
string localFilename = string.Format("{0}.{1}", pictureId.ToString(), lastPart);
//创建文件 保存至存储路径下
File.WriteAllBytes(Path.Combine(LocalImagePath, localFilename), pictureBinary);
}


//获取图片存储路径

public string LocalImagePath
{

  get
  {
    string path = HttpContext.Current.Request.PhysicalApplicationPath + "images";
    return path;
  }
}


//验证输入图像尺寸

public byte[] ValidatePicture(byte[] pictureBinary, string mimeType)
{
  using (MemoryStream stream = new MemoryStream(pictureBinary))
  {
    var b = new Bitmap(stream);
    int maxSize = 600;//此处设置好图片最大尺寸

    if ((b.Height > maxSize) || (b.Width > maxSize))
    {

      //计算图像尺寸,同时保持纵横
      var newSize = CalculateDimensions(b.Size, maxSize);
      var newBitMap = new Bitmap(newSize.Width, newSize.Height);
      var g = Graphics.FromImage(newBitMap);
      g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
      g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
      g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
      g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
      g.DrawImage(b, 0, 0, newSize.Width, newSize.Height);

      var m = new MemoryStream();
      var ep = new EncoderParameters();
      ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L); //100L-图片清晰度
      ImageCodecInfo ici = GetImageCodecInfoFromMimeType(mimeType);//返回指定类型的第一个影像编解码器信息。
      if (ici == null)
      ici = GetImageCodecInfoFromMimeType("image/jpeg");
      newBitMap.Save(m, ici, ep);
      newBitMap.Dispose();
      b.Dispose();

      return m.GetBuffer();

    }
    else
    {
      b.Dispose();
      return pictureBinary;
    }
  }
}

//计算图像尺寸,同时保持纵横

private Size CalculateDimensions(Size originalSize, int targetSize)
{
  var newSize = new Size();
  if (originalSize.Height > originalSize.Width) // portrait
  {
    newSize.Width = (int)(originalSize.Width * (float)(targetSize / (float)originalSize.Height));
    newSize.Height = targetSize;
  }
  else
  {
    newSize.Height = (int)(originalSize.Height * (float)(targetSize / (float)originalSize.Width));
    newSize.Width = targetSize;
  }
  return newSize;
}


//返回指定类型的第一个影像编解码器信息。

private ImageCodecInfo GetImageCodecInfoFromMimeType(string mimeType)
{
  var info = ImageCodecInfo.GetImageEncoders();
  foreach (var ici in info)
  if (ici.MimeType.Equals(mimeType, StringComparison.OrdinalIgnoreCase))
  return ici;
  return null;
}

 

 

<pre></pre>
<p>&nbsp;</p>
<p>北清论文网-中国领先的应届毕业生论文网站</p>
<p>【<a href="http://www.bqlww.com/">北清论文网</a>】【<a href="http://www.51byl.net/">我要毕业啦论文网</a>】</p>

.net上传图片实例

标签:

原文地址:http://www.cnblogs.com/jfeng/p/5551099.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!