Страшный и ужасный формат JPEG
Как не испортить фотографию при сохранении и пересохранении? Нужно ли сохранять JPEG в самом лучшем качестве? Небольшой опыт, которым я хочу поделиться.
Слева — оригинал, справа — это же фото, но после многократных пересохранений.
Почти все фотографы знают, что при каждом повторном сохранении фотографии в формате JPEG, происходит повторное сжатие информации и всё сильнее ухудшается качество снимка. То есть, JPEG годится только как итоговый продукт, но не стоит его использовать для записи промежуточного материала, который вы ещё планируете обрабатывать в фоторедакторе.
Такое же ухудшение качества происходит, если мы, например, отправляем фотографию в письме, прикрепив её, как «картинку», а не как «файл». Социальные сети и мессенджеры часто дополнительно сжимают эти картинки, подгоняя их под свои стандарты.
Мне всегда было интересно узнать, насколько быстро фото придёт в негодность при многократном пересохранении его в формате JPEG. В итоге, я переборол в себе диванного теоретика, не поленился и просто проверил этот вопрос на практике.
Результат оказался довольно неожиданным, что заставило меня взглянуть по-новому на процесс сохранения фотографий в JPEG.
Добрые люди, надеюсь на ваши комментарии, почему такое может происходить.
Вот результаты опыта:
Не зная всех тонкостей и алгоритмов сжатия формата jpeg, я провёл опыт на бытовом уровне. Взял всего одну фотографию и одну программу (Adobe Photoshop).
Оригинальная фотография сохранена в наилучшем качестве.
Процедура была проста: открываем файл — сохраняем, открываем — сохраняем, и так 30 раз. Настройки сохранения были «Стандартными», менялось только качество сжатия, которое я задавал в поле Quality (от 0 до 12).
Процесс сохранения в Фотошопе.
Оказалось, что при сохранении в самом лучшем качестве — 12, заметное ухудшение снимка появлялось уже на пятом сохранении:
Фото было открыто в Фотошопе и сохранено 5 раз.
К 30-му сохранению с фотографией уже было всё плохо:
Фото было открыто в Фотошопе и сохранено 30 раз.
Так что оказалось, портится фото довольно быстро, даже при сохранении в самом лучшем качестве. Что же будет с другими настройками? Я пошёл дальше и проделал тот же опыт для качества 11, 10 и т.д.
Самое удивительное начало происходить со значения качества 8 и ниже — повторные сохранения перестали существенно ухудшать внешний вид фотографии.
Качество — 8. Сохранено — 1 раз.
Качество — 8. Сохранено — 30 раз.
Разницы почти не чувствуется. Хотя, скажу прямо — я её вообще не вижу.
Приведу ещё пример: файл с качеством «6» изначально выглядит хуже, чем файл с качеством «12». Но стоит каждый из них сохранить по 30 раз, как ситуация меняется на противоположную.
Качество — 6. Сохранено — 30 раз. Размер файла — 156 КБ.
Качество — 12. Сохранено — 30 раз. Размер файла — 991 КБ.
Я пока не могу однозначно трактовать полученный результат, но он мне кажется, как минимум, занятным. Если у вас есть мысли по этому поводу, будет интересно их почитать.







немного поясню про JPEG
вне зависимости с каким качеством сжатия JPEG сохраняет изображение, он хранит цвет в формате YUV420 и вот тут и начинается жопа:
YUV - это формат, где цвет каждой точки описывается 3 независимыми характеристиками
Y - яркость (по сути черно-белое изображение), UV - две цветовые компоненты
в формате YUV420 на каждые 4 точки (квадратик 2x2) приходится 4 значения Y и по 1 значению U и V
это сделано из-за особенностей глаза - мы гораздо чувствительнее к разнице в яркости, чем к разнице цветности
таким образом потеря качества происходит уже из-за того, что в отличии от RGB формата (когда каждая точка описывается 3 компонентами цвета - красным, зеленым и синим), YUV420 4 точки описываются одним параметром цвета (UV)
ну и при конвертации из RGB, а потом в RGB (чтобы на экран вывести) страдает точность
например - цвет RGB(32, 64, 128) (глубокий синий цвет) преобразуется в YUV(61, 165, 106), а при обратном преобразовании в (30, 63, 126)
а при многократном преобразовании RGB-YUV-RGB получается вообще треш:
RGB(32, 64, 128) -> RGB(0, 24, 70) - очень грязный темно синий (получено примерно за 45 циклов преобразования)
хотя конечно это все гораздо меньше портит изображение, чем потеря качества при сжатии (дискретные фурье-преобразования, отбрасывание хвостов и т.п.) и конечно гребанная граница между блоками 8x8 (именно с такими блоками работают JPEG кодеры), что конечно правится вейвлет-преобразованиями и соответствующими форматами (типа JPEG2000).