C# 图像压缩质量可自己控制的JPEG的几种方式

使用Bitmap类来读取和处理图片文件

要另存为压缩质量可自己控制的JPEG图片,可以使用Bitmap的Save方法,并在其中设置JPEG的压缩质量。 将Bitmap保存为JPEG图片,其中可以自定义压缩质量:

Bitmap bitmap = new Bitmap("input.jpg");
bitmap.Save("output.jpg", ImageFormat.Jpeg, 
new EncoderParameters(1, new EncoderParameter(Encoder.Quality, 50L)));

这段代码是C#中使用System.Drawing命名空间处理图像的一个示例。它创建了一个Bitmap对象从"input.jpg"加载图像,然后将此图像以一定质量保存为"output.jpg"。这里的关键在于保存图像时使用的EncoderParameters对象,它允许你自定义图像编码器的参数。具体到你的例子中,提到了Encoder.Quality参数。

Encoder.Quality参数的意义: Encoder.Quality参数是用来指定图像压缩质量的。当你将图像保存为如JPEG格式时,可以通过调整这个参数来平衡图像质量和文件大小。较高的质量值意味着图像看起来更接近原始图像,但相应地,文件也会更大。较低的质量值会导致图像有更明显的压缩痕迹,如像素化或噪点,但文件会更小。

值的范围: Encoder.Quality的值是一个长整型(long),在大多数实现中,其有效范围是从0到100,其中:

  • 0表示最低质量(最高压缩),图像将严重失真,但文件大小极小。
  • 100表示最高质量(无损或几乎无损压缩),图像质量最好,接近原始,但文件大小也最大。
  • 常见的中间值如75或80通常能在保持良好视觉质量的同时显著减小文件大小。

在你的代码片段中,new EncoderParameter(Encoder.Quality, 50L)设置了一个质量因子为50的编码参数,这意味着图像将以中等压缩质量保存,既考虑了文件大小,也试图保留一定的图像质量。不过,实际效果还需要根据具体情况查看,因为不同的图像内容对同一质量设置的响应可能不同。

设置 JPEG 压缩级别

如何:设置 JPEG 压缩级别 - Windows Forms .NET Framework | Microsoft Learn

另存为压缩质量可自己控制的JPEG 

C#图片处理之: 另存为压缩质量可自己控制的JPEG

/** <summary>
        /// 保存JPG时用
        /// </summary>
        /// <param name="mimeType"></param>
        /// <returns>得到指定mimeType的ImageCodecInfo</returns>
        private static ImageCodecInfo GetCodecInfo(string mimeType)
        {
            ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();
            foreach (ImageCodecInfo ici in CodecInfo)
            {
                if (ici.MimeType == mimeType) return ici;
            }
            return null;
        }


        /** <summary>
        /// 保存为JPEG格式,支持压缩质量选项
        /// </summary>
        /// <param name="bmp"></param>
        /// <param name="FileName"></param>
        /// <param name="Qty"></param>
        /// <returns></returns>
        public static bool KiSaveAsJPEG(Bitmap bmp, string FileName, int Qty)
        {
            try
            {
                EncoderParameter p;
                EncoderParameters ps;

                ps = new EncoderParameters(1);

                p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Qty);
                ps.Param[0] = p;

                bmp.Save(FileName, GetCodecInfo("image/jpeg"), ps);
                
                return true;
            }
            catch
            {
                return false;
            }

        }

使用 System.Drawing 和 System.IO

在C#中,你可以使用 System.Drawing 和 System.IO 命名空间中的类来另存为JPEG图像,并控制其压缩质量。
不过,直接控制JPEG压缩质量的任务在.NET中并不直接支持,因为JPEG压缩是由库(如libjpeg)完成的,而.NET并没有提供直接操作这些库的接口。

然而,你可以使用一些第三方库如ImageSharp,它提供了更高级的图像处理功能,包括JPEG压缩。
首先,你需要安装 ImageSharp 包。你可以通过 NuGet 包管理器来安装它:
Install-Package ImageSharp
然后,你可以使用以下代码来保存一个图像为JPEG,同时控制其压缩质量:

using System.Drawing;  
using ImageSharp;  
using System.IO;  
  
public void SaveImageWithQuality(Bitmap bmp, string path, int quality)  
{  
    using (var img = Image.FromBitmap(bmp))  
    {  
        img.Mutate(x => x  
             .Format(ImageFormat.Jpeg)  
             .Quality(quality)  
             .Save(path));  
    }  
}

在这个代码中,Bitmap 是你要保存的图像,path 是你要保存的路径,quality 是JPEG的质量,范围是0-100(100表示最高质量,即无压缩)。注意,ImageSharp 的 Quality 设置并不直接对应于传统的JPEG压缩质量设置,它是一个更为复杂的算法,但大致上,更高的质量值意味着更少的压缩和更好的图像质量。

这只是一种可能的解决方案。实际上,对于这样的问题,你可能需要更深入地理解JPEG压缩,或者寻找一个可以直接控制JPEG压缩质量的第三方库。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangnaisheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值