Пожалуйста, поймите, что бесплатного обеда нет. Уменьшение размера изображения 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 очень подходит, если вы не слишком снижаете качество.
Что вы имеете в виду? Массив имеет фиксированный размер после его создания, но вы говорите об сжатии изображения? Снижение качества? Уменьшение размера изображения? Просьба уточнить. –
нарезать его как пиццу и съесть. Извините, байт-массивы напоминают пиццу. особенно круговой буфер – mauris