无损图片缩放

复制代码
 1 public static void SaveThumbnail(Bitmap originBitmap, int width, int height, string filename)
 2         {
 3             using (var newImage = new Bitmap(width, height))
 4             {
 5                 using (var graphic = GetGraphic(originBitmap, newImage))
 6                 {
 7                     graphic.DrawImage(originBitmap, 0, 0, width, height);
 8 
 9                     
10                     ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
11                     ImageCodecInfo ici = null;
12                     foreach (ImageCodecInfo codec in codecs)
13                     {
14                         if (codec.MimeType.IndexOf("png") > -1)
15                             ici = codec;
16                     }
17                     EncoderParameters encoderParams = new EncoderParameters();
18                     long[] qualityParam = new long[1];                    
19                     qualityParam[0] = 100;
20                     EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityParam);
21                     encoderParams.Param[0] = encoderParam;
22 
23                     newImage.Save(filename, ici, encoderParams);
24                 }
25             }
26         }
27 
28         private static Graphics GetGraphic(Image originImage, Bitmap newImage)
29         {
30             newImage.SetResolution(originImage.HorizontalResolution, originImage.VerticalResolution);
31             var graphic = Graphics.FromImage(newImage);
32             graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
33             graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
34             graphic.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
35             graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
36             return graphic;
37         }
复制代码

 

看了dudu的,但是调用报错,稍作修改

 

posted @   鸽子飞扬  阅读(356)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示