C#使用Image.Save()按指定质量保存JPG图片的方法

Leo
Leo
发布时间:2026-10-14| 3人浏览过
原创

在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#图像处理技术的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。