C# 处理JPEG图片压缩

心灵之旅 2024-07-17 ⋅ 37 阅读

引言

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压缩。


全部评论: 0

    我有话说: