C#怎么实现图片缩略图生成 C#如何批量生成图片的缩略图指定尺寸保持比例不变形【图像】

最可靠缩略图生成法是手动用Graphics.DrawImage:先等比计算尺寸并居中,再创建Bitmap画布,设置高质量插值后绘制;加载时用File.ReadAllBytes+MemoryStream避免文件锁;保存时显式指定JPEG编码器及质量参数;所有Image/Graphics对象必须using及时释放且不可跨线程共享。用 Graphics.DrawImage 手动缩放最可控直接调用 Image.GetThumbnailImage 看似简单,但实际返回的缩略图质量差、尺寸不准、还可能黑边或拉伸变形------它内部用了系统缩略图缓存逻辑,根本不尊重你传的宽高参数。真正靠谱的做法是自己算比例、创建新画布、用 Graphics.DrawImage 绘制。核心就三步:计算等比缩放后的真实输出尺寸(保持宽高比,不裁剪)新建 Bitmap 作为目标画布,指定你要的最终尺寸(比如 200×150)用 Graphics.FromImage 获取绘图上下文,设置高质量插值和渲染模式示例关键片段:var targetWidth = 200;var targetHeight = 150;var ratio = Math.Min((double)targetWidth / src.Width, (double)targetHeight / src.Height);var drawWidth = (int)(src.Width * ratio);var drawHeight = (int)(src.Height * ratio);var x = (targetWidth - drawWidth) / 2;var y = (targetHeight - drawHeight) / 2;<p>using var thumb = new Bitmap(targetWidth, targetHeight);using var g = Graphics.FromImage(thumb);g.InterpolationMode = InterpolationMode.HighQualityBicubic;g.SmoothingMode = SmoothingMode.HighQuality;g.PixelOffsetMode = PixelOffsetMode.HighQuality;g.DrawImage(src, x, y, drawWidth, drawHeight);批量处理时别用 Image.FromFile 直接加载在循环里反复调用 Image.FromFile 会锁住原文件,导致后续读取失败或抛出 System.IO.IOException: The process cannot access the file。尤其 Windows 下特别明显。正确做法是先用 File.ReadAllBytes 把文件读进内存,再用 new Bitmap(new MemoryStream(bytes)) 构造图像对象:避免文件句柄长期占用支持并发生成(只要不写同一个输出路径)能统一捕获图像解码异常(比如损坏的 JPEG)注意:MemoryStream 必须保持打开状态直到 Bitmap 使用完毕,否则会报 Parameter is not valid。Save 时指定 JpegEncoder 而不是依赖默认格式直接调用 thumb.Save("out.jpg") 看似省事,但 .NET 默认 JPEG 压缩质量只有 75%,且不支持控制色度抽样、是否保存 EXIF 等。批量生成时容易出现体积偏大或细节糊掉。 VWO 一个A/B测试工具

相关推荐
曲径海盗10 分钟前
【Python 学习第 41 天】for 循环
python·学习笔记·编程入门
摇滚侠14 分钟前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 11
java·笔记·python
沧海一笑-dj29 分钟前
【Python】Python学习笔记-模块与包
python·pip·模块·包·python包·python模块·包与模块
echome88839 分钟前
Python 异常处理:try、else、finally 的正确搭配
开发语言·前端·python·异常处理·编程技巧
云和数据.ChenGuang40 分钟前
Python 单继承与多继承深度剖析:从 MRO 到实战取舍
开发语言·人工智能·python·langchain
威哥爱编程42 分钟前
Python 智能体开发实战 02:你的 AI 助教说话像换了个模型?九成的 system prompt 都写错了
python·agent
威哥爱编程42 分钟前
Python 智能体开发实战 01:装了三遍环境还在报错?虚拟环境和 DeepSeek 一次配到位
python·agent
I Am a robert girl1 小时前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
小咕聊编程1 小时前
基于Python的豆瓣电影数据可视化系统构建分析
开发语言·python·信息可视化
躺柒1 小时前
读数据安全架构设计与实践17安全架构案例(下)
数据库·安全·零信任·安全架构·防火墙·无边界