wes
wes

Reputation: 389

C# lower quality for JPEG image

I'm trying to make an console application in .net core 3, this application can successfully get a bitmap from the computer and send it to another computer. But now I want to lower the quality of the image and send it as a JPEG file.

I have looked on the internet but I'm unable to get it to work. My latest attempt I tried to use the following MSDN website. But with this approach I get stuck at ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg); since my application cannot find GetEncoder. I have found GetEncoder in System.Text.Encoding.Getencoding but here getEncoder doesn't take any parameters.

So my question is which namespace do I have to use or is there another way to lower the quality of an JPEG image?

Upvotes: 0

Views: 731

Answers (1)

Gurhan Polat
Gurhan Polat

Reputation: 706

Here is my functions to compress image as 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();
        }
    }

Upvotes: 1

Related Questions