首页 > 编程 > C# > 正文

C#无损高质量压缩图片代码

2020-01-24 00:40:12
字体:
来源:转载
供稿:网友

本文实例为大家分享了C#无损高质量压缩图片的具体代码,供大家参考,具体内容如下

/// 无损压缩图片  /// <param name="sFile">原图片</param>  /// <param name="dFile">压缩后保存位置</param>  /// <param name="dHeight">高度</param>  /// <param name="dWidth"></param>  /// <param name="flag">压缩质量(数字越小压缩率越高) 1-100</param>  /// <returns></returns>   public static bool GetPicThumbnail(string sFile, string dFile, int dHeight, int dWidth, int flag) {   System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile);   ImageFormat tFormat = iSource.RawFormat;   int sW = 0, sH = 0;    //按比例缩放   Size tem_size = new Size(iSource.Width, iSource.Height);    if (tem_size.Width > dHeight || tem_size.Width > dWidth)   {     if ((tem_size.Width * dHeight) > (tem_size.Width * dWidth))     {       sW = dWidth;       sH = (dWidth * tem_size.Height) / tem_size.Width;     }     else     {       sH = dHeight;       sW = (tem_size.Width * dHeight) / tem_size.Height;     }   }   else   {     sW = tem_size.Width;     sH = tem_size.Height;   }    Bitmap ob = new Bitmap(dWidth, dHeight);   Graphics g = Graphics.FromImage(ob);    g.Clear(Color.WhiteSmoke);   g.CompositingQuality = CompositingQuality.HighQuality;   g.SmoothingMode = SmoothingMode.HighQuality;   g.InterpolationMode = InterpolationMode.HighQualityBicubic;    g.DrawImage(iSource, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel);    g.Dispose();   //以下代码为保存图片时,设置压缩质量    EncoderParameters ep = new EncoderParameters();   long[] qy = new long[1];   qy[0] = flag;//设置压缩的比例1-100    EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);   ep.Param[0] = eParam;   try   {     ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();     ImageCodecInfo jpegICIinfo = null;     for (int x = 0; x < arrayICI.Length; x++)     {       if (arrayICI[x].FormatDescription.Equals("JPEG"))       {         jpegICIinfo = arrayICI[x];         break;       }     }     if (jpegICIinfo != null)     {       ob.Save(dFile, jpegICIinfo, ep);//dFile是压缩后的新路径      }     else     {       ob.Save(dFile, tFormat);     }     return true;   }   catch   {     return false;   }   finally   {     iSource.Dispose();     ob.Dispose();   } } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表