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

  1. /// <summary>  
  2.         /// 无损压缩图片  
  3.         /// </summary>  
  4.         /// <param name="sFile">原图片</param>  
  5.         /// <param name="dFile">压缩后保存位置</param>  
  6.         /// <param name="dHeight">高度</param>  
  7.         /// <param name="dWidth"></param>  
  8.         /// <param name="flag">压缩质量(数字越小压缩率越高) 1-100</param>  
  9.         /// <returns></returns>  
  10.         public static bool GetPicThumbnail(string sFile, string dFile, int dHeight, int dWidth, int flag)  
  11.         {  
  12.   
  13.             System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile);  
  14.             ImageFormat tFormat = iSource.RawFormat;  
  15.             int sW = 0, sH = 0;  
  16.             //按比例缩放  
  17.             Size tem_size = new Size(iSource.Width, iSource.Height);  
  18.   
  19.             if (tem_size.Width > dHeight || tem_size.Width > dWidth) //将**改成c#中的或者操作符号  
  20.             {  
  21.                 if ((tem_size.Width * dHeight) > (tem_size.Height * dWidth))  
  22.                 {  
  23.                     sW = dWidth;  
  24.                     sH = (dWidth * tem_size.Height) / tem_size.Width;  
  25.                 }  
  26.                 else  
  27.                 {  
  28.                     sH = dHeight;  
  29.                     sW = (tem_size.Width * dHeight) / tem_size.Height;  
  30.                 }  
  31.             }  
  32.             else  
  33.             {  
  34.                 sW = tem_size.Width;  
  35.                 sH = tem_size.Height;  
  36.             }  
  37.             Bitmap ob = new Bitmap(dWidth, dHeight);  
  38.             Graphics g = Graphics.FromImage(ob);  
  39.             g.Clear(Color.WhiteSmoke);  
  40.             g.CompositingQuality = CompositingQuality.HighQuality;  
  41.             g.SmoothingMode = SmoothingMode.HighQuality;  
  42.             g.InterpolationMode = InterpolationMode.HighQualityBicubic;  
  43.             g.DrawImage(iSource, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel);  
  44.             g.Dispose();  
  45.             //以下代码为保存图片时,设置压缩质量  
  46.             EncoderParameters ep = new EncoderParameters();  
  47.             long[] qy = new long[1];  
  48.             qy[0] = flag;//设置压缩的比例1-100  
  49.             EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);  
  50.             ep.Param[0] = eParam;  
  51.             try  
  52.             {  
  53.                 ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();  
  54.                 ImageCodecInfo jpegICIinfo = null;  
  55.                 for (int x = 0; x < arrayICI.Length; x++)  
  56.                 {  
  57.                     if (arrayICI[x].FormatDescription.Equals("JPEG"))  
  58.                     {  
  59.                         jpegICIinfo = arrayICI[x];  
  60.                         break;  
  61.                     }  
  62.                 }  
  63.                 if (jpegICIinfo != null)  
  64.                 {  
  65.                     ob.Save(dFile, jpegICIinfo, ep);//dFile是压缩后的新路径  
  66.                 }  
  67.                 else  
  68.                 {  
  69.                     ob.Save(dFile, tFormat);  
  70.                 }  
  71.                 return true;  
  72.             }  
  73.             catch  
  74.             {  
  75.                 return false;  
  76.             }  
  77.             finally  
  78.             {  
  79.                 iSource.Dispose();  
  80.                 ob.Dispose();  
  81.             }  
  82.   
  83.         }  

posted on   大西瓜3721  阅读(421)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)

导航

点击右上角即可分享
微信分享提示