Почему файл jpg, который я преобразовал из файла gif, не четкий и ясный?

Я использую следующий код для преобразования файла gif в файл jpg, он работает, но конечный файл jpg не того же качества, что и исходный файл gif, почему? Есть ли способ улучшить качество?

try
{
  ImageIO.write(ImageIO.read(new File("C:/abc.gif")),"jpg",new File("C:/abc.jpg"));
}
catch (Exception e) { e.printStackTrace(); }

Итак, чтобы задать этот вопрос под другим углом, с помощью описанного выше подхода, как повысить качество продукции?


person Frank    schedule 08.06.2009    source источник
comment
См. Также: stackoverflow.com/questions/2336522/   -  person Chuck Le Butt    schedule 31.03.2013


Ответы (4)


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

Возможно, что _ 1_ сохраняет JPEG с настройкой более низкого качества, чем это необходимо, чтобы изображение выглядело достаточно хорошо.

Чтобы установить более высокое качество, необходимо использовать _ 2_, чтобы указать настройки качества изображения, затем используйте _ 3_ для вывода JPEG.

Например:

// Get a writer for JPEG.
ImageWriter iw = ImageIO.getImageWritersByFormatName("jpeg").next();
iw.setOutput(new FileImageOutputStream(outputFile));

// Set the compression quality to 0.9f.
ImageWriteParam iwParam = iw.getDefaultWriteParam();
iwParam.setCompressionQuality(0.9f);

// Write image
iw.write(null, new IIOImage(imageToWrite, null, null), iwParam);

Интересующие методы:

Тем не менее, как упоминается в других ответах, JPEG не подходит для сжатия текста и иллюстраций. Если цель - сохранить качество изображения, но размер файла может быть больше, чем при сжатии с помощью JPEG, используйте формат сжатия изображения без потерь, такой как PNG, сохранит качество изображения как оно есть, без потерь. Однако во многих случаях размер файла PNG будет больше, чем размер файла JPEG. (Но это не всегда так.)

Общее практическое правило заключается в том, что для фотографий и других реалистичных изображений форматы сжатия с потерями, такие как JPEG, будут хорошо работать для компромисса между размером файла и качеством, в то время как форматы сжатия без потерь, такие как PNG, будут лучше работать для иллюстраций и штриховых рисунков, где есть большие области одинакового цвета с небольшими эффектами градиента.

person coobird    schedule 08.06.2009
comment
Отлично, работает почти так, как я ожидал! Но я заметил кое-что интересное: я прочитал изображение в формате png и установил для параметра CompressionQuality значение 1.0f, и я подумал, что результат будет похож на исходное изображение, но вместо этого светло-синий оказался темно-синим, поскольку это биржевой график. , Я не против, рада, что работает! Спасибо ! Вы можете попробовать это с помощью следующей диаграммы: ichart.finance.yahoo.com/ - person Frank; 09.06.2009
comment
@Frank: Даже при качестве сжатия 1.0f сжатие будет с потерями, поэтому качество вывода не будет идентичным исходному. Я наблюдал изменения цвета в прошлом, так что, вероятно, это один из эффектов сжатия с потерями. - person coobird; 09.06.2009

JPEG особенно плох для изображений с текстом внутри. Хорошая альтернатива - .PNG.

person tekBlues    schedule 08.06.2009

JPEG гарантирует некоторую потерю точности; вот как достигается сжатие. Вы можете выбрать другой размер блока, чтобы минимизировать артефакты, но артефакты будут.

GIF без потерь, а JPEG с потерями; abc.jpg никогда не будет пиксельным эквивалентом abc.gif.

person Oliver N.    schedule 08.06.2009
comment
В стандарте JPEG есть часть без потерь, но никто не удосужился реализовать его :) - person Joey; 09.06.2009
comment
Хотя GIF не содержит потерь, стоит отметить, что это индексированный цветовой формат без потерь, поэтому некоторая информация о цвете теряется при сохранении из источника Truecolor. JPEG - это формат истинного цвета с потерями, поэтому проиндексированное изображение преобразуется в истинный цвет (без улучшения качества), а затем усредняется в смысле JPEG / DCT (с соответствующим снижением качества). - person Stobor; 09.06.2009
comment
В стандарте GIF есть также часть с потерями. Вздох, все не так просто :) - person zildjohn01; 09.06.2009

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

Если изображение нарисовано или содержит большие участки одного цвета и не является фотографическим, тогда изображение будет лучше сжато с помощью PNG. Это формат без потерь, который поддерживает 32-битный цвет.

В наши дни вы почти никогда не должны использовать изображения в формате GIF - формат поддерживает только 8-битный цвет и обеспечивает относительно плохое сжатие.

person 1800 INFORMATION    schedule 08.06.2009