Пожалуйста, поймите, что нет бесплатного обеда. Уменьшение размера изображения JPEG за счет увеличения сжатия также приведет к снижению качества изображения. Тем не менее, вы можете уменьшить размер изображения JPEG, используя класс Image
. Этот код предполагает, что inputBytes
содержит исходное изображение.
var jpegQuality = 50;
Image image;
using (var inputStream = new MemoryStream(inputBytes)) {
image = Image.FromStream(inputStream);
var jpegEncoder = ImageCodecInfo.GetImageDecoders()
.First(c => c.FormatID == ImageFormat.Jpeg.Guid);
var encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, jpegQuality);
Byte[] outputBytes;
using (var outputStream = new MemoryStream()) {
image.Save(outputStream, jpegEncoder, encoderParameters);
outputBytes = outputStream.ToArray();
}
}
Теперь outputBytes
содержит повторно сжатую версию изображения с использованием другого качества JPEG.
Уменьшая jpegQuality
(должно быть в диапазоне 0-100), вы можете увеличить сжатие за счет более низкого качества изображения. Подробнее см. В поле Encoder.Quality
.
Вот пример, где вы можете увидеть, как jpegQuality
влияет на качество изображения. Это та же фотография, сжатая с использованием 20, 50 и 80, как значение jpegQuality
. Размеры: 4,99, 8,28 и 12,9 КБ.
Обратите внимание, что текст становится «нечетким» даже при высоком качестве. Вот почему вы должны избегать использования JPEG для изображений с однородно окрашенными областями (изображения / диаграммы / диаграммы, созданные на компьютере). Вместо этого используйте PNG. Для фотографий JPEG очень подходит, если вы не слишком снизите качество.