Почему JPEG теряет качество, а ты этого не замечаешь
JPEG выбрасывает часть картинки навсегда — и делает это так, чтобы глаз не заметил подмены. Рассказываем, как сжатие с потерями обманывает зрение и почему пересохранять JPEG — плохая идея.
JPEG честно признаётся, что теряет часть картинки — вопрос лишь в том, какую часть и почему вы этого не видите.
Сжатие с потерями выбрасывает то, что глаз всё равно не разглядит. Гениальность JPEG — в умении точно угадать, что именно можно потерять.
Фотография с телефона в исходном виде весит десятки мегабайт. В формате JPEG — пару мегабайт, и на экране разница почти не видна. Но это не сжатие без потерь: часть информации стирается насовсем, и распаковать оригинал уже нельзя. Секрет в том, что JPEG теряет именно то, к чему наше зрение нечувствительно.
Глаз — плохой измеритель деталей
Человеческое зрение устроено неравномерно. Мы отлично замечаем разницу в яркости, но гораздо хуже — разницу в цвете. И почти не видим мелких цветовых перепадов на фоне крупных. JPEG это эксплуатирует на полную.
Первый шаг — картинку переводят из привычных красного-зелёного-синего в систему «яркость + два цветовых канала». После этого цветовые каналы можно смело прорядить: хранить цвет с вдвое меньшим разрешением, чем яркость. Глаз подмены не замечает — а данных уже стало меньше.
Картинку раскладывают на волны
Дальше начинается самое интересное. Изображение режут на квадратики 8×8 пикселей, и каждый такой квадратик раскладывают на сумму простых узоров — от ровной заливки до всё более частой «ряби». Эта математическая операция называется дискретным косинусным преобразованием (DCT). По сути картинка превращается из набора пикселей в набор «сколько здесь крупных деталей, сколько средних, сколько мельчайших».
И вот ключ: крупные плавные переходы глаз видит отлично, а мельчайшую рябь — почти нет. Значит, коэффициенты при самых мелких узорах можно записать грубо или вовсе обнулить.
Квантование: ручка громкости потерь
Шаг, на котором происходит собственно потеря, называется квантованием. Каждый коэффициент делят на число из специальной таблицы и округляют. Для крупных деталей делитель маленький — округление почти не вредит. Для мелкой ряби делитель большой — и многие коэффициенты после округления превращаются в ноль.
Когда вы двигаете ползунок «качество» при сохранении JPEG, вы как раз меняете эту таблицу. Высокое качество — мягкое округление, мало потерь, большой файл. Низкое качество — агрессивное округление, картинка рассыпается на квадраты, зато файл крошечный.
| Качество | Что происходит | Размер |
| 95 | потери почти незаметны | большой |
| 75 | хороший компромисс | средний |
| 30 | видны блоки 8×8 и «грязь» | маленький |
Почему пересохранять JPEG нельзя
Раз потеря необратима, каждое новое сохранение в JPEG округляет уже округлённое. Сохранили, открыли, чуть поправили, снова сохранили — и так десять раз. Картинка деградирует, как ксерокопия ксерокопии: появляются ореолы вокруг контуров, «грязь» в небе, заметные квадраты. Это явление называют поколенческой потерей.
Отсюда практическое правило: храните исходники в формате без потерь (например, PNG для графики или RAW для фотоснимков), а в JPEG переводите только финальную версию для публикации. И никогда не используйте JPEG для скриншотов с текстом — резкие границы букв состоят как раз из той «мелкой ряби», которую формат безжалостно размывает, оставляя вокруг символов заметные артефакты.
Заодно становится понятно, почему JPEG так любят фотографии и так не любят логотипы. Живой снимок полон плавных переходов и шума, где потеря мелких деталей незаметна, — формат на нём блистает. А плакат с крупными плоскими заливками и чёткими линиями раскрывает все слабости: вокруг резких краёв появляются ореолы, а ровный фон покрывается еле заметной рябью. Для такой графики честнее форматы без потерь, которые сохранят каждый пиксель границы нетронутым.
JPEG — не плохой формат. Он гениально подогнан под несовершенство нашего зрения. Просто важно понимать, за что именно вы платите уменьшением файла.