引言
JPEG是一种流行的图像文件格式,它使用有损压缩算法来减小文件大小。然而,在实际应用中,我们经常需要对JPEG进行压缩,并且希望能够控制压缩的质量。本文将介绍几种C#中可自己控制压缩质量的JPEG压缩方式。
1. 使用EncoderParameters
通过EncoderParameters可以设置JPEG编码器的压缩质量。以下是一个示例代码:
public void CompressImageUsingEncoderParameters(string inputPath, string outputPath, long quality)
{
using (Bitmap image = new Bitmap(inputPath))
{
ImageCodecInfo jpegEncoder = GetEncoder(ImageFormat.Jpeg);
System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
EncoderParameters encoderParams = new EncoderParameters(1);
EncoderParameter encoderParam = new EncoderParameter(myEncoder, quality);
encoderParams.Param[0] = encoderParam;
image.Save(outputPath, jpegEncoder, encoderParams);
}
}
private static ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
在这个示例中,我们定义了一个CompressImageUsingEncoderParameters
方法,该方法接收输入路径、输出路径以及压缩质量作为参数。首先,我们通过Bitmap
类加载输入的图像。然后,我们获取JPEG编码器的信息。接下来,我们创建EncoderParameters
对象并设置压缩质量的参数。最后,我们通过Save
方法将图像保存到指定的输出路径。
2. 使用System.Drawing.Image.Save方法
另一种控制JPEG压缩质量的方法是直接使用System.Drawing.Image.Save
方法,并设置压缩质量参数。以下是一个示例代码:
public void CompressImageUsingSave(string inputPath, string outputPath, long quality)
{
using (Bitmap image = new Bitmap(inputPath))
{
ImageCodecInfo jpegEncoder = GetEncoder(ImageFormat.Jpeg);
EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = qualityParam;
image.Save(outputPath, jpegEncoder, encoderParams);
}
}
这个示例与之前的示例非常相似,只是我们直接在Image.Save
方法中设置了压缩质量参数。
3. 使用第三方库
除了使用.NET Framework提供的内置功能外,还可以使用第三方库来控制JPEG的压缩质量。以下是一个使用ImageSharp库的示例代码:
public void CompressImageUsingImageSharp(string inputPath, string outputPath, int quality)
{
using (Image<Rgba32> image = Image.Load<Rgba32>(inputPath))
{
var encoder = new JpegEncoder
{
Quality = quality
};
image.Save(outputPath, encoder);
}
}
在这个示例中,我们首先使用Image.Load
方法加载输入的图像。然后,我们创建一个JpegEncoder
对象,并设置压缩质量参数。最后,我们使用Save
方法将图像保存到指定的输出路径。
结论
使用C#可以灵活控制JPEG压缩的质量,这对于在图像处理和文件传输中非常有用。本文介绍了使用EncoderParameters、Image.Save方法以及第三方库来实现这一目标的几种方法。根据实际需求和偏好,您可以选择适合您的项目的方法来进行JPEG压缩。
本文来自极简博客,作者:心灵之旅,转载请注明原文链接:C# 处理JPEG图片压缩