C#怎么实现图片缩略图生成 C#如何批量生成图片的缩略图指定尺寸保持比例不变形【图像】
最可靠缩略图生成法是手动用Graphics.DrawImage先等比计算尺寸并居中再创建Bitmap画布设置高质量插值后绘制加载时用File.ReadAllBytesMemoryStream避免文件锁保存时显式指定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;pusing 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测试工具
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2541451.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!