C # более низкое качество изображения JPEG - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь создать консольное приложение в .net core 3, это приложение может успешно получить растровое изображение с компьютера и отправить его на другой компьютер. Но теперь я хочу снизить качество изображения и отправить его в виде файла JPEG.

Я посмотрел в Интернете, но я не могу заставить его работать. В своей последней попытке я пытался использовать следующий веб-сайт MSDN . Но при таком подходе я застреваю на ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);, поскольку мое приложение не может найти GetEncoder. Я нашел GetEncoder в System.Text.Encoding.Getencoding, но здесь getEncoder не принимает никаких параметров.

Так что мой вопрос в том, какое пространство имен я должен использовать или есть другой способ понизить качествоJPEG изображение?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Вот мои функции для сжатия изображения в формате 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();
        }
    }
0 голосов
/ 04 ноября 2019

Попробуйте это pictureBox.Image.Save(name,ImageFormat.Jpeg); Он изменит формат с любого .jpg

...