mozjpeg
Высокопроизводительная библиотека для сжатия JPEG-изображений, разработанная Mozilla Research. Она основана на libjpeg-turbo и расширяет её возможности алгоритмами, улучшающими степень сжатия без потери совместимости со стандартным форматом JPEG. Библиотека особенно эффективна для прогрессивной отрисовки изображений в вебе, обеспечивая меньший размер файлов при сохранении визуального качества.
Особенности
- улучшенное сжатие JPEG за счёт оптимизированных таблиц квантования и алгоритмов кодирования;
- полная поддержка прогрессивного формата с настраиваемым количеством сканирований;
- сохранение совместимости со всеми существующими декодерами JPEG;
- поддержка 8- и 12-битных изображений, оттенков серого и CMYK;
- высокая производительность благодаря базовому коду libjpeg-turbo и SIMD-оптимизациям;.
Основные компоненты
MozJPEG предоставляет набор утилит и библиотечных функций, которые расширяют возможности классического JPEG-сжатия (подробнее с документацией можно ознакомиться здесь).
Улучшенное сжатие и квантование
Основное преимущество MozJPEG — использование психовизитуальных таблиц квантования, адаптированных под особенности человеческого восприятия. Это позволяет сильнее сжимать изображения без заметной потери качества по сравнению со стандартными таблицами libjpeg.
Ключевые особенности сжатия:
- оптимизированные таблицы квантования для яркости и цветности;
- настраиваемый уровень качества (0–100) с более равномерной шкалой;
- автоматическое взвешивание высокочастотных компонент;
- поддержка сглаживания артефактов (deringing) при низких битрейтах.
Прогрессивный формат и сканирования
MozJPEG значительно улучшает прогрессивное кодирование JPEG, позволяя генерировать файлы, которые отображаются быстрее при загрузке через медленные соединения. Библиотека предоставляет гибкий контроль над структурой сканирований.
Возможности прогрессивного кодирования:
- автоматическое или ручное задание количества сканирований (до 100);
- сортировка частотных коэффициентов по значимости для более быстрого отображения;
- поддержка «оптимизированного прогрессива» с расстановкой сканирований на основе энтропии;
- уменьшение количества артефактов на промежуточных стадиях загрузки.
Обработка метаданных и цветовых профилей
Как и базовый libjpeg, MozJPEG сохраняет все маркеры APPn, включая EXIF, ICC-профили и XMP. Библиотека корректно обрабатывает цветовые пространства и преобразования.
Функции работы с метаданными:
- чтение и запись ICC-профилей без изменения цветовых данных;
- сохранение EXIF-ориентации при поворотах и зеркалировании (через jpegtran);
- автоматическое определение и преобразование цветовых пространств (YCbCr, RGB, CMYK);
- сохранение комментариев и текстовых полей.
Инструменты командной строки
В составе MozJPEG поставляются модифицированные версии стандартных утилит libjpeg, которые используют улучшенные алгоритмы сжатия.
Основные утилиты:
cjpeg— кодирование исходных изображений (PNG, BMP, TGA) в JPEG с поддержкой всех оптимизаций MozJPEG;djpeg— декодирование JPEG в другие форматы;jpegtran— без потерь операции вращения, зеркалирования, обрезки и оптимизации прогрессивных JPEG;rdjpgcomиwrjpgcom— чтение и запись комментариев.
Программный интерфейс
MozJPEG сохраняет обратную совместимость с API libjpeg-turbo и libjpeg v6b/v7/v8. Разработчики могут использовать те же структуры и функции, при этом автоматически получая преимущества улучшенного сжатия.
Основные возможности API:
- полная совместимость с существующим кодом, использующим libjpeg;
- дополнительные параметры сжатия через расширенные структуры (jpeg_compress_struct);
- управление прогрессивными сканированиями через jpeg_simple_progression и кастомные скрипты;
- возможность интеграции в фреймворки обработки изображений (ImageMagick, GD, Pillow).
Оптимизация без потерь
Утилита jpegtran в MozJPEG поддерживает все стандартные трансформации без распаковки/пересжатия, а также включает дополнительные оптимизации.
Возможности без потерь:
- поворот на 90, 180, 270 градусов и зеркалирование;
- обрезка (cropping) с сохранением всех метаданных;
- оптимизация таблиц Хаффмана для уменьшения размера;
- переупорядочивание сканирований в прогрессивном JPEG;
- удаление неиспользуемых маркеров и «мусора».