CompressDog

Как уменьшить размер JPEG без потери качества

Практическое руководство: как сжимать JPEG, сохраняя важные детали, и какая настройка кодировщика испорчена почти во всех онлайн-инструментах.

Почти любой инструмент «сжать изображение» идёт на одну и ту же молчаливую сделку: выбрасывает половину информации о цвете и надеется, что вы не заметите. Заметно это обычно на тонах кожи, красных цветах, тонком цветном тексте и любых фото с резкими цветными границами. Ползунки качества тут не помогают — это не проблема качества.

Что на самом деле делает JPEG большим

JPEG хранит яркость в полном разрешении, а цвет — в пониженном. Это соотношение называется субдискретизацией цветности:

Многие камеры и генераторы изображений экспортируют 4:4:4. Многие кодировщики, когда у них просят JPEG «для веба» или «сжатый», незаметно переводят его в 4:2:0. Это преобразование необратимо: цветовые детали отбрасываются ещё до того, как спрашивают хоть какой-то ползунок качества.

Мы измерили это на 323 изображениях: то же качество, изменена только дискретизация. SSIMULACRA2 упал в среднем с 87,8 до 82,7 — ухудшилось каждое изображение без исключения, 47 % более чем на 5 пунктов, худшее — на 17. Повышение качества JPEG этого не возвращает.

Число качества — не процент

Качество JPEG 80 не означает «80 % от оригинала». Это индекс в таблице шагов квантования, определённой в 1992 году и не имеющей физического смысла. Два кодировщика, оба заявляющие качество 80, могут различаться по размеру файла на 40 % при одинаковом визуальном качестве.

Практические диапазоны для фотографического контента:

Что этот инструмент делает иначе

Мы считываем субдискретизацию цветности из заголовка файла до того, как его тронуть, и оставляем её без изменений. Если ваше изображение 4:4:4 — оно останется 4:4:4. Большинство инструментов не могут сказать, что использовал ваш файл; мы показываем это для каждого изображения до сжатия.

Ещё мы не тратим ваше качество впустую. Если файл уже сжат (скажем, более ранний экспорт в q70), перекодирование в q80 сделает файл больше, не улучшив вид: кодировщик тратит биты на описание артефактов прошлого сжатия. Мы распознаём этот случай и вместо угадывания выполняем проход без потерь: энтропийное кодирование перезаписывается, данные изображения остаются идентичными бит в бит. На baseline-JPEG это обычно экономит около 4 %.

Рабочий порядок действий

Всё работает в вашем браузере. Изображения никуда не загружаются.

Открыть компрессор