zoukankan      html  css  js  c++  java
  • .net上传图片实例

    前台代码:
    <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>

  • 相关阅读:
    Python第二弹--------类和对象
    Python第一弹--------初步了解Python
    Java标记接口
    CentOS7下的YUM源服务器搭建详解,过程写的很详细(转)
    CentOS7.0安装Nginx 1.10.0
    QT中C++与Html端通信例子
    QT基础:QMainWindow学习小结
    QT基础:QT 定时器学习
    QT3D场景快速绘制入门学习
    QT编译错误:cannot find file: *.pro
  • 原文地址:https://www.cnblogs.com/jfeng/p/5551099.html
Copyright © 2011-2022 走看看