JPEG-лаборатория
Сжатие с потерями в действии. Выберите источник изображения, двигайте ползунок качества и наблюдайте, как JPEG уменьшает файл и какие артефакты появляются на картинке. Все вычисления настоящие - браузер сжимает изображение так же, как это делает любая программа.
Что такое сжатие с потерями
JPEG разбивает изображение на блоки 8×8 пикселей, переводит их в частотную область и округляет получившиеся коэффициенты. Чем сильнее округление - тем меньше данных, но и заметнее артефакты: блочность, ореолы вокруг контрастных линий, «размазанные» мелкие детали.
Q = 100 - почти без потерь, файл почти не сжимается.
Q = 75 - стандарт JPEG, разница незаметна.
Q = 10 - видны квадраты 8×8.
Q = 1 - катастрофа, но контуры всё ещё узнаваемы.
Ползунок качества двигает квантование JPEG: чем ниже Q, тем больше коэффициентов обнуляется. Кнопка «Показать разницу» (под ползунком) переключает правый холст в режим карты различий - яркие пиксели показывают, где именно JPEG потерял информацию.
Что такое YCbCr и зачем прореживать цвет
JPEG не работает с RGB напрямую. Сначала изображение переводится в пространство YCbCr: один канал яркости и два канала цветности.
Коэффициенты не случайны. Человеческий глаз эволюционно лучше всего различает зелёный спектр (растительность, лица), хуже - красный, и почти не воспринимает изменения синего как источник яркости. Поэтому зелёный вносит в яркость 58,7 %, красный - 29,9 %, синий - только 11,4 %.
Дальше алгоритм пользуется этой особенностью: яркость Y сохраняется для каждого пикселя, а цветность Cb и Cr можно прореживать. Глаз не замечает потерь, а файл становится заметно меньше.
Итог: JPEG теряет информацию дважды - сначала прореживает цвет, потом квантует частоты. Обе потери незаметны по отдельности, но вместе дают 5-10-кратное уменьшение размера.