首页 > 解决方案 > JPEG图像的C#质量较低

问题描述

我正在尝试在 .net core 3 中制作一个控制台应用程序,该应用程序可以成功地从计算机获取位图并将其发送到另一台计算机。但现在我想降低图像质量并将其作为 JPEG 文件发送。

我在互联网上看过,但我无法让它工作。我最近尝试使用以下MSDN网站。但是使用这种方法,ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);由于我的应用程序找不到GetEncoder. 我GetEncoderSystem.Text.Encoding.Getencoding但这里getEncoder没有找到任何参数。

所以我的问题是我必须使用哪个命名空间,还是有其他方法可以降低 JPEG 图像的质量?

标签: c#image-processing

解决方案


这是我将图像压缩为 jpeg 的功能

    public static System.Drawing.Imaging.ImageCodecInfo GetEncoder(System.Drawing.Imaging.ImageFormat format)
    {
        System.Drawing.Imaging.ImageCodecInfo[] codecs = System.Drawing.Imaging.ImageCodecInfo.GetImageDecoders();

        foreach (System.Drawing.Imaging.ImageCodecInfo codec in codecs)
        {
            if (codec.FormatID == format.Guid)
            {
                return codec;
            }
        }
        return null;
    }

    public static byte[] GetCompressedImage(System.Drawing.Image img, long quality)
    {
        System.Drawing.Imaging.ImageCodecInfo ici = GetEncoder(System.Drawing.Imaging.ImageFormat.Jpeg);
        System.Drawing.Imaging.EncoderParameters eps = new System.Drawing.Imaging.EncoderParameters(2);
        eps.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
        eps.Param[1] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)System.Drawing.Imaging.EncoderValue.CompressionLZW);
        using (MemoryStream ms = new MemoryStream())
        {
            img.Save(ms, ici, eps);
            return ms.ToArray();
        }
    }

推荐阅读