C#中DrawImage导致图片体积大幅增大的问题求助
解决JPG图片保存后体积暴增的问题
你的核心问题是直接调用Bitmap.Save()保存JPG时,.NET默认使用极低压缩率(甚至无压缩),导致原本经过压缩的JPG被转为高体积的未压缩/低压缩格式。结合你的代码,给出以下修复方案:
问题代码的核心问题
- 保存JPG时未指定压缩参数,默认生成的文件几乎无压缩
- 代码中存在笔误:
ret的高度用了map1.Height,应改为h避免尺寸错误
修正后的代码
var map = new Bitmap("a.jpg"); var w = map.Width; var h = map.Height; var _bitmap = new Bitmap(w, h, PixelFormat.Format24bppRgb); Graphics _g = Graphics.FromImage(_bitmap); // 修正笔误,将map1.Height改为h var ret = new Rectangle(0, 0, w, h); _g.DrawImage(map, ret); // 配置JPG压缩参数 var jpgEncoder = ImageCodecInfo.GetImageEncoders().First(codec => codec.FormatID == ImageFormat.Jpeg.Guid); var encoderParams = new EncoderParameters(1); // 质量取值0-100:数值越小压缩率越高、体积越小,画质损失越大;80左右兼顾体积与画质 encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, 80L); _bitmap.Save("a.jpg", jpgEncoder, encoderParams); // 释放资源,避免内存泄漏 _g.Dispose(); _bitmap.Dispose(); map.Dispose();
体积暴增的原因
原始JPG是经过有损压缩的格式,而你创建的Format24bppRgb位图是未压缩的像素数据。直接调用无参数的Save()方法时,.NET会以默认的最低压缩率保存,相当于把未压缩的位图数据直接转存为JPG,自然体积暴增。
额外建议
- 处理图片后必须手动释放
Bitmap、Graphics等资源,防止内存泄漏 - 拼接图片时确认最终尺寸与预期一致,避免生成多余像素数据
内容的提问来源于stack exchange,提问作者Aphelios
相关产品推荐
相关产品推荐

