Формат JPG (JPEG) — стандарт сжатия фотографий
Формат JPG (JPEG): стандарт ITU-T T.81 (1992), сжатие с потерями на основе DCT и квантования, почему нет прозрачности, прогрессивный JPEG и выбор качества.
Название JPEG происходит от комитета, создавшего стандарт (Joint Photographic Experts Group), а самое распространённое расширение файла — .jpg. Спецификация комитета, созданного в 1986 году, была утверждена в сентябре 1992 года как рекомендация ITU-T T.81, а в 1994 году — как ISO/IEC 10918-1. Спустя более 30 лет это по-прежнему самый широко принимаемый формат фото — в цифровых камерах, смартфонах, интернете и формах загрузки на сайтах госорганов.
Принцип сжатия
- Цвета RGB переводятся в яркость (Y) и цветоразностные компоненты (Cb, Cr), причём разрешение цветоразностных каналов часто уменьшается вдвое (цветовая субдискретизация).
- Изображение делится на блоки 8×8 пикселей, и для каждого с помощью дискретного косинусного преобразования (DCT) вычисляются частотные составляющие.
- Каждая составляющая делится на значение из таблицы квантования и округляется. Чем ниже настройка качества, тем больше делитель и тем больше высокочастотных деталей теряется. Потери возникают именно на этом этапе.
- Оставшиеся значения сжимаются без потерь кодом Хаффмана.
Поскольку в первую очередь отбрасывается информация, к которой глаз менее чувствителен, на естественных фото разница малозаметна даже при сильном сжатии. Зато на тексте, линиях и границах однотонных областей вокруг краёв появляются ореолы (звон) и следы блоков 8×8.
Структура файла, JFIF и EXIF
Файл JPG всегда начинается с FF D8 (начало изображения) и заканчивается FF D9 (конец изображения). Между ними последовательно идут таблицы квантования, таблицы Хаффмана, размеры изображения и другие сведения — в блоках, которые называются «маркерами». В начале файла обычно находятся данные JFIF (маркер APP0) или EXIF (маркер APP1); цифровые камеры и смартфоны используют EXIF, где хранятся параметры съёмки и местоположение. Именно поэтому перед публикацией фото стоит удалять геоданные (руководство по EXIF).
Базовый и прогрессивный JPEG
T.81 определяет и базовый (baseline) режим, при котором изображение прорисовывается сверху вниз, и прогрессивный (progressive), при котором сначала показывается размытая картинка целиком, постепенно становясь чётче. Для крупных фото в интернете прогрессивный режим выигрывает по ощущаемой скорости, а если важна совместимость со старым оборудованием или системами подачи документов, надёжнее базовый. В стандарте есть и режим без потерь, но он почти не используется.
Достоинства и ограничения
- Совместимость: по данным MDN, все основные браузеры поддерживали его с самого начала, и его открывают практически все ОС и программы.
- Гибкость: одним параметром качества можно регулировать размер в широких пределах. Для фото самый эффективный диапазон — качество 70–85.
- Нет прозрачности: альфа-канала нет, поэтому прозрачный фон сохранить нельзя.
- Потери при пересохранении: при каждом открытии и сохранении квантование происходит заново, и качество понемногу падает.
- Ограничение 8 бит: трудно передать HDR и широкий диапазон тонов, а на плавных градиентах вроде неба может появляться ступенчатость (бандинг).
Основное применение
Самый надёжный выбор, когда неизвестно, чем будет пользоваться получатель: обмен фото, подача анкет и фото на документы, вложения в письма, передача в типографию. Для скриншотов, логотипов и диаграмм лучше подходит PNG.
При конвертации в другие форматы
- JPG → PNG: дополнительных потерь нет, но уже утраченная информация не вернётся, а размер обычно вырастает в несколько раз. Переводить JPG в PNG имеет смысл, только если вы будете многократно редактировать файл или добавлять прозрачные области.
- JPG → WebP и AVIF: потери накладываются на потери, но при разумном качестве размер можно сильно уменьшить (JPG в WebP).
- Другие форматы → JPG: прозрачные области заливаются однотонным цветом, например белым, а цветовая информация глубже 8 бит сокращается до 8 бит.
- Ориентация EXIF: JPG со смартфонов часто хранят поворот в EXIF. Если конвертер его не применяет, фото может оказаться лежащим на боку.
Как подогнать размер под целевое число КБ, читайте в статье как работает сжатие фото.
Попробовать сейчас