C#使用Image.Save()按指定质量保存JPG图片的方法
在C#开发中,直接调用 Image.Save 方法保存的JPG图片往往因默认的75%压缩质量而显得模糊。要获得高质量图像,需手动构建 EncoderParameters 并指定对应的 ImageCodecInfo(即编码器),从而精确控制JPEG压缩率。
问题背景与原理
System.Drawing.Image.Save(string filename) 是常见的图片保存方式,但对于JPEG格式,微软框架内部会应用一个固定的、不可直接覆盖的压缩质量值(通常为75)。当需要导出高清图片或保留更多细节时,这种默认处理会导致明显的画质损失。
要实现高质量保存,核心在于绕过默认行为:
1. 获取系统支持的图像编码器列表。
2. 筛选出JPEG格式的编码器 (ImageCodecInfo)。
3. 构造包含目标质量值的 EncoderParameter。
第1步:引入必要命名空间
在使用相关类之前,必须确保引入了以下命名空间,以便访问图像编码相关的接口:
using System.Drawing.Imaging;
第2步:实现高质量保存图片的方法
该方法接受原始Image对象、保存路径和目标质量值(1-100整数)。其执行逻辑为创建参数集、锁定JPEG编码器,最后将参数传递给Save方法。
重要提示:涉及文件写入操作,请确保程序对 savePath 所在目录拥有写入权限。
/// <summary>
/// 按指定的压缩质量及格式保存图片(微软的Image.Save方法保存到图片压缩质量为75)
/// </summary>
/// <param name="sourceImage">要保存的图片的Image对象</param>
/// <param name="savePath">图片要保存的绝对路径</param>
/// <param name="imageQualityValue">图片要保存的压缩质量,该参数的值为1至100的整数,数值越大,保存质量越好</param>
/// <returns>保存成功,返回true;反之,返回false</returns>
public bool SaveImageForSpecifiedQuality(System.Drawing.Image sourceImage, string savePath, int imageQualityValue)
{
//以下代码为保存图片时,设置压缩质量
EncoderParameters encoderParameters = new EncoderParameters();
EncoderParameter encoderParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, imageQualityValue);
encoderParameters.Param[0] = encoderParameter;
try
{
ImageCodecInfo[] ImageCodecInfoArray = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo jpegImageCodecInfo = null;
for (int i = 0; i < ImageCodecInfoArray.Length; i++)
{
if (ImageCodecInfoArray[i].FormatDescription.Equals("JPEG"))
{
jpegImageCodecInfo = ImageCodecInfoArray[i];
break;
}
}
sourceImage.Save(savePath, jpegImageCodecInfo, encoderParameters);
return true;
}
catch
{
return false;
}
}
第3步:调用方法进行测试
加载本地图片后,调用上述函数将图片以最高质量(100)保存为新文件。操作完成后记得释放原图片资源。
System.Drawing.Image image = System.Drawing.Image.FromFile("D:\\TestImage\\0.jpg");
// 调用自定义方法,第三个参数设为100即为最高质量
bool success = SaveImageForSpecifiedQuality(image, "D:\\TestImage\\1.jpg", 100);
if(success) {
Console.WriteLine("High quality save successful.");
}
image.Dispose();
完成判断
- 检查返回值:函数返回
true表示文件已成功写入磁盘。 - 视觉对比:打开生成的
1.jpg与源图进行对比,若无明显锯齿或噪点,则说明参数生效。 - 文件大小:质量设为100时,文件体积通常显著大于默认的75质量版本。
以上就是C#中按指定质量保存图片的详细内容,更多关于C#图像处理技术的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









