博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[C#]解决生成的缩略图模糊的问题
阅读量:7076 次
发布时间:2019-06-28

本文共 2466 字,大约阅读时间需要 8 分钟。

一、问题场景

针对一张正方形图片生成 48px × 48px 的缩略图并保存为图片文件,但发现生成的缩略图很模糊。

生成的模糊的缩略图如下:

原始图片(300px × 300px, png格式):

代码中调用的是 System.Drawing.Image. GetThumbnailImage() 方法,主要实现代码如下:

private void SaveThumbnail(Bitmap bitmap, int width, int height, string directory, string filename, string extension){    var physicalPath = directory + filename + extension;    using (var thumbnail = bitmap.GetThumbnailImage(width, height, () => { return true; }, IntPtr.Zero))    {        using (var encoderParameters = new EncoderParameters(1))        {            encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);            thumbnail.Save(physicalPath,                        ImageCodecInfo.GetImageEncoders()                            .Where(x => x.FilenameExtension.Contains(extension.ToUpperInvariant()))                            .FirstOrDefault(),                        encoderParameters);        }    }           }

二、解决方法

改为调用 System.Drawing.Graphics.DrawImage() 方法, 主要实现代码如下:

private void SaveThumbnail(Bitmap originBitmap, int width, int height, string directory, string filename, string extension){    var physicalPath = directory + filename + extension;                using (var newImage = new Bitmap(width, height))    {        using (var graphic = GetGraphic(originBitmap, newImage))        {            graphic.DrawImage(originBitmap, 0, 0, width, height);            using (var encoderParameters = new EncoderParameters(1))            {                encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);                newImage.Save(physicalPath,                            ImageCodecInfo.GetImageEncoders()                                .Where(x => x.FilenameExtension.Contains(extension.ToUpperInvariant()))                                .FirstOrDefault(),                            encoderParameters);            }        }    }            }private Graphics GetGraphic(Image originImage, Bitmap newImage){    newImage.SetResolution(originImage.HorizontalResolution, originImage.VerticalResolution);    var graphic = Graphics.FromImage(newImage);    graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;    graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;    graphic.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;    graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;    return graphic;}

 生成的缩略图效果如下:

三、参考资料

转载地址:http://nfpml.baihongyu.com/

你可能感兴趣的文章
Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例
查看>>
日本展示机器人Erica,看脸还不错
查看>>
一步一步搞定InfoPath(01)——提交表单到Access数据库
查看>>
SET 语句选项
查看>>
ubuntu ufw防火墙
查看>>
加载AI,让好奇号学会了自我决策
查看>>
阿里云API应用创新大赛总决赛,强者之争即将开启
查看>>
用yum工具下载一个rpm包
查看>>
「镁客·请讲」杨毅:用全新“制阻系统”颠覆整个VR骑行
查看>>
poj1006生理周期(中国剩余定理)
查看>>
Linux & Oracle目录说明
查看>>
多线程、多进程区别
查看>>
keepalived的搭建
查看>>
spring-boot和redis的缓存使用
查看>>
linux中的中断处理方法
查看>>
yum安装haproxy
查看>>
nodeJS之fs文件系统
查看>>
矩阵元发布新一代区块链安全计算架构
查看>>
jira邮件自动提醒功能配置
查看>>
压力测试工具收集
查看>>