在C#中优化JPEG压缩级别和文件大小方式

 更新时间:2025年01月07日 14:23:01   作者:坐井观老天  
文章介绍了如何在C#中优化JPEG压缩级别和文件大小,通过使用文件菜单加载图像文件并选择不同的压缩级别,程序将图像保存为临时文件并显示生成的图像和文件大小,关键方法SaveJpg使用给定的压缩指数保存JPG文件,并通过GetEncoderInfo获取编码器信息

C#优化JPEG压缩级别和文件大小

此示例可让您检查不同 JPEG 压缩级别的图像质量。

使用文件菜单的打开命令加载图像文件。

然后使用“JPEG 压缩指数 (CI)”组合框选择压缩级别。

程序将图像保存到具有该压缩级别的临时文件中,并显示生成的图像和文件大小。

该程序的关键是以下SaveJpg方法

该方法使用给定的压缩指数保存 JPG 文件。(这是您的工具包中一个非常有用的功能。)

// Save the file with a specific compression level.
private void SaveJpg(Image image, string file_name, long compression)
{
    try
    {
        EncoderParameters encoder_params = new EncoderParameters(1);
        encoder_params.Param[0] = new EncoderParameter(
            System.Drawing.Imaging.Encoder.Quality, compression);

        ImageCodecInfo image_codec_info =
            GetEncoderInfo("image/jpeg");
        File.Delete(file_name);
        image.Save(file_name, image_codec_info, encoder_params);
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error saving file '" + file_name +
            "'\nTry a different file name.\n" + ex.Message,
            "Save Error", MessageBoxButtons.OK,
            MessageBoxIcon.Error);
    }
}

此方法创建一个EncoderParameters对象

用于保存要发送给创建 JPG 文件的编码器的信息。它填充了压缩索引。

接下来,该方法调用GetEncoderInfo函数(稍后介绍)来获取有关 JPG 文件编码器的信息。

它删除以前的临时文件并使用编码器再次保存文件。

以下代码显示GetEncoderInfo方法

// Return an ImageCodecInfo object for this mime type.
private ImageCodecInfo GetEncoderInfo(string mime_type)
{
    ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
    for (int i = 0; i <= encoders.Length; i++)
    {
        if (encoders[i].MimeType == mime_type) return encoders[i];
    }
    return null;
}

此代码循环遍历可用的编码器,直到找到具有正确 MIME 类型的编码器,在本例中为“image/jpeg”。

在本文顶部显示的图片中,压缩级别为 30。它仍然产生不错的效果,压缩文件的大小仅为原始文件大小的 18% 左右。结果因图像而异。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • .net从服务器下载文件中文名乱码解决方案

    .net从服务器下载文件中文名乱码解决方案

    这篇文章主要给大家介绍.net中从服务器下载文件中文名乱码的解决方案,有需要的朋友可以参考下
    2015-08-08
  • C#将数字转换成字节数组的方法

    C#将数字转换成字节数组的方法

    这篇文章主要介绍了C#将数字转换成字节数组的方法,涉及C#字符串操作的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • C#实现chart控件动态曲线绘制

    C#实现chart控件动态曲线绘制

    这篇文章主要为大家详细介绍了C#实现chart控件动态曲线绘制,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 基于C#实现文字转语音功能

    基于C#实现文字转语音功能

    这篇文章将在C#中集成一个语音对象SpeechSynthesizer,可以根据填入的文字内容自动解析成语音并使用系统扬声器进行语音播报,感兴趣的小伙伴可以了解下
    2025-02-02
  • C# 字符串的连接(实例讲解)

    C# 字符串的连接(实例讲解)

    下面小编就为大家分享一篇C# 字符串的连接实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • C#实时监控文件系统变化的实战指南

    C#实时监控文件系统变化的实战指南

    在现代开发中,实时监控文件系统变化是许多应用场景的核心需求,例如日志分析、文件同步、配置热更新等,在C#中,FileSystemWatcher是实现类似功能的“卧底”工具,本文将揭秘如何通过FileSystemWatcher实现高效、隐蔽、稳定的文件系统监听,需要的朋友可以参考下
    2025-07-07
  • c#实现输出本月的月历

    c#实现输出本月的月历

    本篇文章是对使用c#输出本月月历的实现的代码进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • System.Data.OleDb.OleDbException: 未指定的错误的完美解决方法

    System.Data.OleDb.OleDbException: 未指定的错误的完美解决方法

    本文给大家带来三种有关System.Data.OleDb.OleDbException: 未指定的错误的完美解决方法,每种方法都很不错,需要的朋友可以参考下
    2016-09-09
  • C#延时关闭电脑、取消关闭电脑操作方法(需管理员权限)

    C#延时关闭电脑、取消关闭电脑操作方法(需管理员权限)

    在C#中,如果想实现延时关闭电脑和取消关闭的功能,可以有多种方法,下面给大家分享C#延时关闭电脑、取消关闭电脑操作方法,感兴趣的朋友一起看看吧
    2024-06-06
  • C#使用Spire.XLS实现将Excel转换成高质量JPG

    C#使用Spire.XLS实现将Excel转换成高质量JPG

    在日常办公开发中,经常遇到需要将 Excel 表格转换为图片的需求,本文主要介绍了如何使用 Spire.XLS 库,配合 C# 代码实现高质量 Excel 转 JPG,感兴趣的小伙伴可以了解下
    2026-04-04

最新评论