MozJPEG — это специализированный JPEG-энкодер Mozilla для уменьшения размера JPG-файлов с сохранением совместимости с обычными браузерами, просмотрщиками изображений, CMS, CDN и стандартными JPEG-декодерами. Программа не пытается заменить Photoshop, Lightroom, GIMP или универсальные конвертеры форматов. Её задача уже: взять изображение и подготовить JPEG так, чтобы файл занимал меньше места, быстрее отдавался по сети и при этом визуально оставался пригодным для публикации.
Выбор редакции
MozJPEG
ФотоМАСТЕР
- Простой интерфейс
- Ретушь и замена фона
- Фильтры и автокоррекция
- Быстрая обработка фото
MozJPEG
- Работает онлайн
- Зависит от сервиса
- Не заменяет полноценный фоторедактор
- Есть ограничения бесплатного доступа
Главная область применения MozJPEG — веб-оптимизация изображений. Это инструмент для тех случаев, когда фотографии, иллюстрации и контентные JPG нужно сжать перед размещением на сайте, в блоге, интернет-магазине, медиакаталоге, мобильном приложении или статической сборке. Выходной файл остаётся обычным JPEG, поэтому его можно открыть в браузере, графическом редакторе, файловом менеджере, CMS и большинстве программ, которые работают с JPG. MozJPEG добавляет к привычному JPEG более эффективное кодирование: progressive scan optimization, trellis quantization, оптимизированные таблицы и сценарии lossless-обработки через jpegtran.
Важная особенность MozJPEG — отсутствие привычного графического окна. У программы нет кнопок Open, Save, Export, Compress, Preview или панели с ползунками качества. Её интерфейс — командная строка и параметры утилит cjpeg, jpegtran, djpeg, rdjpgcom, wrjpgcom. Это делает MozJPEG менее удобным для случайного пользователя, но очень сильным инструментом для автоматизации: его можно запускать в скриптах, сборщиках сайта, backend-пайплайнах, CI/CD, пакетной обработке фотографий и системах подготовки медиаконтента.
Что такое MozJPEG
MozJPEG расшифровывается как Mozilla JPEG Encoder Project. Это не отдельный формат файла и не новый тип изображения. На выходе получается обычный .jpg или .jpeg, который сохраняет совместимость с JPEG-экосистемой. Отличие находится не в расширении файла, а в том, как именно энкодер подбирает параметры сжатия и организует данные внутри JPEG.
Проект построен вокруг идеи: JPEG остаётся широко поддерживаемым форматом, но стандартные энкодеры часто не выжимают из него максимум. Вместо того чтобы заставлять сайт переходить на новый формат, MozJPEG улучшает уже существующий JPEG-процесс. Поэтому он особенно полезен там, где нельзя полностью заменить JPG на AVIF, WebP или другой современный формат, но нужно уменьшить вес изображений без ломки совместимости.
Технически MozJPEG связан с libjpeg-turbo: он использует совместимость с libjpeg API и ABI, но добавляет свои улучшения именно для сжатия. MozJPEG может встраиваться в графические программы и инструменты обработки изображений через стандартный libjpeg API, а комплектная cjpeg используется как командная утилита для практического кодирования и демонстрации возможностей библиотеки.
С точки зрения обычного рабочего процесса MozJPEG можно воспринимать как набор инструментов:
| Компонент | Что делает |
|---|---|
cjpeg | кодирует входное изображение в JPEG |
jpegtran | оптимизирует и трансформирует уже существующий JPEG |
djpeg | декодирует JPEG в обычный растровый формат |
rdjpgcom | читает комментарии из JPEG-файла |
wrjpgcom | добавляет или заменяет JPEG-комментарии |
Самая важная утилита для создания JPG — cjpeg. Самая важная утилита для оптимизации уже готовых JPG — jpegtran.
Для каких задач подходит MozJPEG
MozJPEG используют не для ретуши и не для художественной обработки. Он нужен на этапе финальной подготовки файла. Типичный сценарий выглядит так: изображение уже отредактировано, обрезано, приведено к нужному размеру, сохранено как исходник или промежуточный файл, после чего MozJPEG сжимает его для публикации.
Программа хорошо подходит для таких задач:
-
уменьшить размер JPG-файлов перед загрузкой на сайт;
-
сделать progressive JPEG для более приятной загрузки на медленных соединениях;
-
оптимизировать фотографии для интернет-магазина;
-
подготовить изображения для блога, лендинга, портфолио или новостного сайта;
-
удалить EXIF, комментарии и лишние метаданные;
-
оптимизировать Huffman-таблицы без изменения пикселей через
jpegtran; -
встроить сжатие JPEG в сборку статического сайта;
-
обработать всю папку с фотографиями через Bash, PowerShell или другой скрипт;
-
использовать JPEG-сжатие внутри backend-сервиса;
-
включить MozJPEG в pipeline вместе с ресайзом, CDN и генерацией responsive images.
MozJPEG особенно полезен там, где изображений много. Если нужно вручную сжать одну фотографию раз в месяц, проще открыть Squoosh или ImageOptim. Если нужно регулярно обрабатывать сотни или тысячи JPEG-файлов, консольная модель MozJPEG становится преимуществом.
Что входит в программу
cjpeg
cjpeg — основная утилита кодирования. Она принимает входное изображение и создаёт JPEG. Базовая форма команды:
cjpeg [switches] [imagefile] > jpegfile Для скриптов удобнее использовать вариант с -outfile:
cjpeg [switches] -outfile output.jpg input.bmp Разница важная. В первом случае результат пишется в стандартный вывод, и пользователь сам перенаправляет поток через >. Во втором случае выходной файл явно задаётся ключом -outfile, что безопаснее и понятнее в автоматизации. Синтаксис с -outfile работает на разных системах и удобен для пакетных сценариев.
Пример простого кодирования:
cjpeg -quality 80 -progressive -outfile photo-optimized.jpg photo.bmp Эта команда создаёт JPEG с качеством 80 и progressive-структурой.
jpegtran
jpegtran работает с уже существующими JPEG-файлами. Его используют, когда файл уже в формате JPG и требуется оптимизировать структуру, удалить метаданные, сделать progressive JPEG, повернуть изображение или выполнить lossless-кроп без обычного перекодирования пикселей.
Пример типичной оптимизации готового JPEG:
jpegtran -copy none -optimize -progressive input.jpg > output.jpg Эта команда:
-
не копирует лишние метаданные;
-
оптимизирует entropy encoding;
-
пересобирает файл в progressive JPEG;
-
создаёт новый файл через перенаправление вывода.
jpegtran важен именно потому, что не всегда нужно повторно сжимать изображение через cjpeg. Если качество уже устраивает, лучше сначала попробовать lossless-оптимизацию.
djpeg
djpeg выполняет обратную операцию: декодирует JPEG обратно в обычный растровый формат. Базовый синтаксис:
djpeg [switches] [jpegfile] > imagefile В повседневной веб-оптимизации djpeg используют реже, но он полезен для тестирования, диагностики, сравнения и построения цепочек обработки.
rdjpgcom и wrjpgcom
rdjpgcom читает текстовые JPEG-комментарии, а wrjpgcom добавляет их в файл. Это узкие служебные утилиты, но они показывают, что MozJPEG работает не только с пикселями, но и с JPEG-маркерами.
Пример чтения комментария:
rdjpgcom input.jpg Пример добавления комментария:
wrjpgcom -comment "optimized for web" input.jpg > output.jpg Комментарии не влияют на само изображение, но занимают место в файле. Для веб-публикации их обычно удаляют, если нет конкретной причины сохранять служебную информацию.
Поддерживаемые входные форматы и ограничения
cjpeg ориентирован на JPEG-кодирование, а не на роль универсального конвертера. Он работает с PPM, PGM, BMP, GIF, Targa и JPEG-сценариями в зависимости от сборки и способа использования. Формат входного файла обычно распознаётся автоматически, кроме отдельных случаев с Targa. JPEG-файлы используются в фактическом JFIF-представлении, а менее распространённые JPEG-производные форматы не являются основной областью работы утилит.
Отсюда следует практическое правило: MozJPEG лучше рассматривать как финальный JPEG-энкодер, а не как программу открыть что угодно и сохранить во что угодно. Если исходник находится в PNG, TIFF, HEIC, PSD, RAW или AVIF, обычно сначала выполняют подготовку в другом инструменте: приводят изображение к нужному размеру, цветовому пространству и формату, а затем используют MozJPEG для финального JPG.
Это не недостаток, а специализация. Программа хорошо делает именно то, для чего создана: производит эффективные JPEG-файлы.
Логика интерфейса: как работать без графического окна
У MozJPEG нет визуального интерфейса, поэтому кнопки программы — это ключи командной строки. Вся работа строится из пяти частей:
| Элемент команды | Роль |
cjpeg или jpegtran | выбор утилиты |
input.jpg, input.bmp, photo.ppm | входной файл |
-quality 80, -progressive, -copy none | параметры обработки |
-outfile output.jpg или > output.jpg | способ записи результата |
output.jpg | итоговый файл |
Пример:
cjpeg -quality 82 -progressive -optimize -outfile product-card.jpg product-source.bmp Здесь:
-
cjpegзапускает JPEG-кодирование; -
-quality 82задаёт уровень качества; -
-progressiveвключает progressive JPEG; -
-optimizeвключает оптимизацию entropy encoding; -
-outfile product-card.jpgуказывает выходной файл; -
product-source.bmp— исходник.
Для оптимизации уже готового JPG команда выглядит иначе:
jpegtran -copy none -optimize -progressive input.jpg > output.jpg Здесь jpegtran не выбирает новое качество через -quality, а перестраивает JPEG-представление без обычного повторного lossy-кодирования.
Основные возможности cjpeg
Настройка качества через -quality
Ключ -quality N управляет соотношением размера файла и визуального качества. Значение может находиться в диапазоне от 0 до 100, а значение по умолчанию — 75. Чем выше число, тем ближе результат к исходному изображению, но тем больше файл. Чем ниже число, тем меньше файл, но тем выше риск артефактов: блоков, шумов, потери деталей, грязи в градиентах и размытия мелких текстур.
Пример:
cjpeg -quality 75 -progressive -outfile photo-q75.jpg photo.bmp
cjpeg -quality 85 -progressive -outfile photo-q85.jpg photo.bmp
cjpeg -quality 90 -progressive -outfile photo-q90.jpg photo.bmp Качество 100 почти никогда не является разумной настройкой для веба. Оно резко увеличивает вес файла и часто не даёт пропорциональной визуальной выгоды. Для публикации фотографий обычно тестируют диапазон примерно 75–90, а для менее критичных изображений могут использовать и более низкие значения. Важно не угадывать идеальное число, а проверять конкретное изображение: портрет, пейзаж, товарное фото, скриншот и иллюстрация реагируют на JPEG-сжатие по-разному.

Progressive JPEG через -progressive
Ключ -progressive создаёт progressive JPEG. Такой файл загружается не строго сверху вниз, а несколькими проходами: сначала появляется грубая версия изображения, затем она уточняется. Для пользователя это часто выглядит лучше на медленном интернете: картинка быстрее занимает своё место в макете и постепенно становится резкой.
cjpeg -quality 80 -progressive -outfile hero-progressive.jpg hero.bmp В cjpeg ключ -progressive подразумевает оптимизацию, если не используется arithmetic coding. Это делает его практичным вариантом для веб-изображений, особенно для крупных фотографий, баннеров и hero-блоков.
Baseline JPEG через -baseline
Ключ -baseline принудительно создаёт baseline JPEG:
cjpeg -baseline -quality 80 -outfile photo-baseline.jpg photo.bmp Baseline JPEG загружается последовательно сверху вниз. Такой вариант выбирают, когда нужна максимально консервативная совместимость или когда progressive-загрузка по какой-то причине нежелательна. В современных веб-сценариях progressive JPEG часто выглядит предпочтительнее для больших изображений, но baseline по-прежнему остаётся нормальным выбором для небольших файлов, служебных картинок и систем, где важно простое декодирование.
Оптимизация entropy encoding через -optimize
Ключ -optimize включает оптимизацию параметров entropy encoding:
cjpeg -quality 82 -optimize -outfile optimized.jpg input.bmp Он обычно делает JPEG немного меньше, не меняя визуального качества. Цена — более медленное кодирование и большее потребление памяти во время обработки. Для разовой публикации, статической сборки или backend-пайплайна это обычно приемлемо. Для real-time-сценариев, где изображения нужно кодировать мгновенно под высокой нагрузкой, скорость уже становится отдельным фактором.
Монохромный JPEG через -grayscale
Ключ -grayscale создаёт чёрно-белый JPEG из цветного входного изображения:
cjpeg -grayscale -quality 80 -outfile document-gray.jpg scan.bmp Такой режим полезен для сканов, архивных материалов, чертежей, документов и изображений, где цвет не нужен. Монохромный JPEG обычно занимает меньше места и быстрее обрабатывается, потому что не хранит цветовую информацию.
RGB JPEG через -rgb
Ключ -rgb подавляет стандартное преобразование RGB-входа в YCbCr:
cjpeg -rgb -quality 85 -outfile rgb-output.jpg input.bmp Обычный JPEG-процесс часто использует YCbCr, потому что это удобно для сжатия фотографий и субдискретизации цвета. -rgb нужен в более специальных случаях, когда требуется сохранить RGB-представление. Для стандартной веб-оптимизации фотографий этот режим не является базовой настройкой.
Автоматическое распознавание входного формата
cjpeg автоматически распознаёт поддерживаемые входные форматы, поэтому в обычной команде не нужно указывать, что файл BMP или PPM:
cjpeg -quality 80 -progressive -outfile result.jpg source.bmp Исключение — отдельные Targa-файлы, для которых предусмотрен ключ -targa.
Работа с качеством: как выбирать -quality
Выбор -quality — центральная настройка MozJPEG. Ошибка многих пользователей — считать, что существует одно универсальное значение. На практике качество зависит от содержимого изображения.
Фотография с мягким светом, размытым фоном и естественными текстурами может хорошо выглядеть при 75–82. Скриншот интерфейса с мелким текстом, резкими линиями и однотонными областями может плохо переносить JPEG даже при высоком качестве. Товарное фото на белом фоне может требовать аккуратной проверки краёв объекта. Пейзаж с листвой, травой и мелкой фактурой может сильнее показывать шумы и замыливание.
Практический подход:
-
Сделать несколько вариантов.
-
Сравнить размер.
-
Открыть изображения в масштабе 100%.
-
Проверить проблемные зоны: лица, текст, волосы, траву, градиенты, тени, контрастные края.
-
Оставить самый маленький файл, который визуально не портит задачу.
Пример тестовой серии:
cjpeg -quality 70 -progressive -outfile photo-q70.jpg photo.bmp
cjpeg -quality 75 -progressive -outfile photo-q75.jpg photo.bmp
cjpeg -quality 80 -progressive -outfile photo-q80.jpg photo.bmp
cjpeg -quality 85 -progressive -outfile photo-q85.jpg photo.bmp
cjpeg -quality 90 -progressive -outfile photo-q90.jpg photo.bmp После этого проверяют размер:
ls -lh photo-q*.jpg Для веб-контента часто выигрывает не самое красивое при увеличении 300%, а баланс: нормальный вид в реальном размере, адекватная детализация и небольшой вес. Изображение, которое пользователь видит как карточку товара шириной 600 пикселей, не обязано храниться с качеством архивного мастер-файла.

Progressive JPEG и baseline JPEG
Progressive JPEG — одна из причин, по которой MozJPEG популярен в веб-оптимизации. Baseline JPEG показывает картинку сверху вниз. Progressive JPEG сначала показывает изображение целиком, но грубо, а затем постепенно добавляет детализацию. Для больших фотографий это часто лучше воспринимается пользователем: он быстрее понимает, что изображено, даже если файл ещё не догрузился полностью.
Сравнение:
| Режим | Как загружается | Где уместен |
| Baseline JPEG | сверху вниз | маленькие изображения, консервативные системы, простые сценарии |
| Progressive JPEG | от грубой версии к детальной | крупные фото, веб-страницы, медленные сети, лендинги, блоги |
Команды:
cjpeg -baseline -quality 80 -outfile photo-baseline.jpg photo.bmp
cjpeg -progressive -quality 80 -outfile photo-progressive.jpg photo.bmp Для MozJPEG progressive-режим ценен не только визуальным поведением при загрузке, но и оптимизацией структуры файла. Progressive JPEG часто получается меньше baseline-варианта и лучше подходит для крупных веб-изображений.
Trellis quantization
Trellis quantization — одна из ключевых технологий MozJPEG. Если объяснять без перегруза математикой, JPEG-сжатие всегда решает, какие детали оставить, а какие можно отбросить ради меньшего файла. Обычный подход делает это грубее, а trellis quantization выбирает коэффициенты с учётом соотношения качество/размер. Цель — получить меньший файл при сопоставимом визуальном восприятии.
Эта возможность особенно важна при создании JPEG из других форматов. Когда cjpeg кодирует изображение заново, trellis quantization помогает улучшить итоговое соотношение качества и размера. В отличие от чистой lossless-оптимизации, это уже часть lossy-кодирования: файл становится меньше потому, что энкодер умнее выбирает, какую информацию считать менее важной.
Для пользователя это проявляется просто: при одинаковом целевом уровне качества MozJPEG часто даёт более компактный файл, чем обычный JPEG-энкодер. Особенно это заметно в веб-процессах, где важны десятки килобайт на каждом изображении и сотни мегабайт трафика на большом каталоге.
Работа через jpegtran
jpegtran — отдельная важная часть MozJPEG. Его нельзя воспринимать как ещё один способ поставить качество. Он работает с уже сжатым JPEG и выполняет операции над JPEG-структурой. Это удобно, когда нужно не ухудшить изображение повторным lossy-кодированием.
Типичная команда:
jpegtran -copy none -optimize -progressive input.jpg > output.jpg Что она делает:
| Ключ | Назначение |
-copy none | не копировать дополнительные маркеры и метаданные |
-optimize | оптимизировать entropy encoding |
-progressive | записать progressive JPEG |
> | направить результат в новый файл |
Такой сценарий особенно хорош для файлов, которые уже выглядят нормально, но содержат лишние метаданные, неоптимальные таблицы или baseline-структуру. jpegtran может уменьшить вес без обычного повторного ухудшения пикселей.
Удаление метаданных
JPEG-файл может содержать EXIF, комментарии, ICC-профили, данные редакторов и другие маркеры. Для сайта они часто не нужны: пользователь не видит модель камеры, дату съёмки, GPS-координаты или служебные записи редактора. Но эти данные увеличивают файл и иногда раскрывают лишнюю информацию.
Ключи jpegtran для копирования маркеров:
| Ключ | Что сохраняется |
-copy none | ничего лишнего не копируется |
-copy comments | сохраняются только комментарии |
-copy icc | сохраняется ICC-профиль |
-copy all | сохраняются все дополнительные маркеры |
Пример удаления метаданных:
jpegtran -copy none -optimize -progressive original.jpg > clean.jpg Если важна точная цветопередача, не стоит автоматически удалять ICC-профиль. Для обычных веб-фотографий -copy none часто оправдан, но для изображений, где цвет критичен, лучше тестировать варианты с сохранением ICC:
jpegtran -copy icc -optimize -progressive original.jpg > clean-with-icc.jpg Lossless-поворот и отражение
jpegtran умеет выполнять JPEG-трансформации без обычного повторного сжатия. Это полезно, когда нужно повернуть или отразить файл, не ухудшая его повторным сохранением.
Примеры:
jpegtran -rotate 90 -copy none input.jpg > rotated-90.jpg
jpegtran -rotate 180 -copy none input.jpg > rotated-180.jpg
jpegtran -flip horizontal -copy none input.jpg > flipped-horizontal.jpg
jpegtran -flip vertical -copy none input.jpg > flipped-vertical.jpg Ключ -perfect заставляет операцию выполняться только если она может быть сделана идеально:
jpegtran -rotate 90 -perfect input.jpg > rotated.jpg Если JPEG-размеры не совпадают с границами блоков, некоторые операции могут требовать обрезки краёв или не быть идеально lossless. Именно поэтому -perfect полезен в автоматизации: он помогает не получить неожиданно изменённый результат.
Кадрирование через -crop
jpegtran поддерживает кадрирование:
jpegtran -crop 1200x800+0+0 input.jpg > crop.jpg Формат:
-crop ШИРИНАxВЫСОТА+X+Y Пример:
jpegtran -crop 800x600+100+50 product.jpg > product-crop.jpg Здесь создаётся область 800×600 пикселей со смещением 100 по X и 50 по Y. Такой crop полезен для автоматической подготовки превью, карточек и фрагментов изображения, но с JPEG-блоками нужно быть аккуратным: не каждый crop будет таким же свободным, как в растровом редакторе.
Практическая инструкция: сжатие одного изображения
Шаг 1. Подготовить исходник
Перед запуском MozJPEG изображение должно быть уже приведено к нужному размеру. MozJPEG не является программой для полноценного ресайза, ретуши или композиции. Сначала нужно решить:
-
какая ширина нужна на сайте;
-
нужен ли retina-вариант;
-
сохранять ли цветовой профиль;
-
будет ли изображение фотографией, баннером, карточкой товара или иллюстрацией;
-
какой допустимый вес файла.
Шаг 2. Создать JPEG через cjpeg
Базовая команда:
cjpeg -quality 80 -progressive -outfile output.jpg input.bmp Если исходник уже JPEG и требуется повторное кодирование:
cjpeg -quality 80 -progressive -outfile output.jpg input.jpg Повторное lossy-кодирование уже сжатого JPEG нужно применять осторожно. Если цель — просто убрать метаданные и перестроить progressive-структуру, лучше использовать jpegtran.
Шаг 3. Проверить размер
Linux/macOS:
ls -lh input.* output.jpg Windows PowerShell:
Get-Item input.jpg, output.jpg | Select-Object Name, Length Шаг 4. Проверить визуальное качество
Нельзя оценивать MozJPEG только по размеру. Нужно открыть исходник и результат рядом, сравнить:
-
лицо и кожу;
-
волосы и шерсть;
-
мелкий текст;
-
логотипы;
-
контрастные границы;
-
плавные градиенты;
-
тени;
-
однотонные фоны;
-
мелкую природную текстуру.
Если артефакты видны, поднимают качество:
cjpeg -quality 85 -progressive -outfile output-q85.jpg input.bmp Если отличий не видно, можно попробовать ниже:
cjpeg -quality 75 -progressive -outfile output-q75.jpg input.bmp Шаг 5. Выбрать финальный файл
Финальным считается не самый маленький файл, а самый маленький файл, который визуально решает задачу. Для изображения в hero-блоке допустимый уровень обычно выше. Для маленькой иллюстрации в списке — ниже. Для фотографии товара, где важны фактура и цвет, нужно сравнивать осторожнее.

Практическая инструкция: lossless-оптимизация готового JPEG
Если файл уже в JPEG и визуально устраивает, начинать лучше с jpegtran:
jpegtran -copy none -optimize -progressive input.jpg > output.jpg Это хороший первый шаг для:
-
фотографий из CMS;
-
изображений, выгруженных из графического редактора;
-
старых файлов с EXIF;
-
JPG, которые уже сжаты, но не оптимизированы;
-
картинок, где нельзя допустить дополнительного ухудшения качества.
После команды нужно сравнить размер:
ls -lh input.jpg output.jpg Если экономия есть и изображение открывается корректно, можно применять этот сценарий к папке.
Практическая инструкция: пакетная обработка папки
Bash для Linux/macOS
Безопасный вариант с отдельной папкой результата:
mkdir -p optimized
for file in *.jpg *.jpeg; do
[ -e "$file" ] || continue
jpegtran -copy none -optimize -progressive "$file" > "optimized/$file"
done Такой вариант не перезаписывает исходники. Это важно: ошибки в скриптах с изображениями обычно стоят дороже, чем экономия нескольких секунд.
Вариант с cjpeg для повторного кодирования:
mkdir -p encoded
for file in *.jpg *.jpeg; do
[ -e "$file" ] || continue
cjpeg -quality 82 -progressive -outfile "encoded/$file" "$file"
done Этот способ уже выполняет lossy-перекодирование, поэтому его нужно использовать после проверки качества на небольшой выборке.
PowerShell для Windows
Lossless-оптимизация через jpegtran:
New-Item -ItemType Directory -Force optimized
Get-ChildItem -File -Include *.jpg,*.jpeg | ForEach-Object {
$out = Join-Path "optimized" $_.Name
jpegtran -copy none -optimize -progressive $_.FullName | Set-Content -Encoding Byte $out
} Повторное кодирование через cjpeg:
New-Item -ItemType Directory -Force encoded
Get-ChildItem -File -Include *.jpg,*.jpeg | ForEach-Object {
$out = Join-Path "encoded" $_.Name
cjpeg -quality 82 -progressive -outfile $out $_.FullName
} В реальном рабочем процессе лучше сначала обработать 10–20 изображений, проверить результат и только после этого запускать обработку всей папки.
Настройки, которые используются чаще всего
| Задача | Команда | Комментарий |
| Создать JPEG для сайта | cjpeg -quality 80 -progressive -outfile out.jpg in.bmp | базовый веб-сценарий |
| Сделать файл меньше без повторного lossy-кодирования | jpegtran -copy none -optimize -progressive in.jpg > out.jpg | безопасный старт для готовых JPG |
| Сохранить ICC-профиль | jpegtran -copy icc -optimize -progressive in.jpg > out.jpg | когда важен цвет |
| Удалить метаданные | jpegtran -copy none in.jpg > out.jpg | полезно для приватности и веса |
| Сделать baseline JPEG | cjpeg -baseline -quality 80 -outfile out.jpg in.bmp | для консервативной совместимости |
| Сделать чёрно-белый JPEG | cjpeg -grayscale -quality 80 -outfile out.jpg in.bmp | для сканов и монохромных изображений |
| Повернуть без обычного пересжатия | jpegtran -rotate 90 -perfect in.jpg > out.jpg | если операция возможна идеально |
| Обрезать JPEG | jpegtran -crop 800x600+0+0 in.jpg > out.jpg | требует аккуратности с JPEG-блоками |
Сценарии использования в веб-разработке
Статический сайт
В статическом сайте MozJPEG можно запускать перед публикацией. Например, исходники лежат в assets/source, а оптимизированные изображения попадают в public/images.
mkdir -p public/images
for file in assets/source/*.jpg; do
name=$(basename "$file")
jpegtran -copy none -optimize -progressive "$file" > "public/images/$name"
done Такой подход подходит для Hugo, Eleventy, Astro, Jekyll, Nuxt static output и других статических сборок.
Интернет-магазин
Для магазина важны стабильность и повторяемость. Карточки товаров должны иметь одинаковую ширину, предсказуемый вес и нормальную детализацию. MozJPEG здесь используют после ресайза:
-
Изображение приводится к нужной ширине.
-
Сохраняется в промежуточный формат.
-
Кодируется через
cjpeg. -
Проверяется размер.
-
Публикуется в CDN или CMS.
Пример:
cjpeg -quality 84 -progressive -outfile product-1200.jpg product-1200.bmp Для маленьких превью можно использовать качество ниже:
cjpeg -quality 76 -progressive -outfile product-thumb.jpg product-thumb.bmp Новостной сайт или блог
Для статей и блогов чаще всего важна скорость загрузки. Большинство иллюстраций не требуют архивного качества. Хороший старт:
cjpeg -quality 78 -progressive -outfile article-cover.jpg article-cover.bmp Для уже готовых JPG:
jpegtran -copy none -optimize -progressive article-cover.jpg > article-cover-web.jpg Медиаархив
Для архива нужно разделять мастер-файлы и веб-копии. MozJPEG не должен заменять оригиналы. Правильная схема:
-
оригиналы хранятся отдельно;
-
веб-копии генерируются автоматически;
-
качество подбирается по назначению;
-
метаданные удаляются только из публичных копий;
-
исходники не перезаписываются.
Качество результата
MozJPEG лучше всего проявляет себя на фотографиях и растровом веб-контенте: портретах, пейзажах, предметных фото, фуд-фото, иллюстрациях с плавными переходами, изображениях для статей и карточек товаров. Там, где обычный JPEG уже является разумным форматом, MozJPEG помогает уменьшить вес без перехода на другой формат.
Хуже подходят:
-
скриншоты интерфейсов с мелким текстом;
-
логотипы;
-
схемы;
-
иконки;
-
изображения с прозрачностью;
-
графика с резкими плоскими областями;
-
маленькие UI-элементы;
-
изображения, которые потом будут многократно редактироваться.
Для таких файлов PNG, SVG, WebP или AVIF могут оказаться лучше. Это не слабость MozJPEG, а свойство самого JPEG. JPEG — lossy-формат, ориентированный прежде всего на фотографии и сложные растровые изображения.
Производительность
MozJPEG делает ставку на эффективность сжатия, а не на максимальную скорость. Его смысл — потратить больше CPU во время подготовки файла, чтобы затем каждый пользователь сайта скачивал меньше данных. Это особенно логично для статического контента: файл кодируется один раз, а отдаётся тысячи или миллионы раз.
В сравнении с libjpeg-turbo разница целей заметна. libjpeg-turbo оптимизирован под скорость и использует SIMD-ускорение для JPEG-компрессии и декомпрессии, тогда как MozJPEG добавляет методы, которые улучшают сжатие, но могут замедлять кодирование.
Для сайта это нормальный компромисс:
-
кодирование происходит на стороне разработчика, CMS, backend или CI;
-
пользователь получает уже готовый файл;
-
экономия трафика повторяется при каждой загрузке;
-
скорость кодирования важна только на этапе подготовки.
Для on-demand-сжатия под высокой нагрузкой нужно тестировать производительность. Если сервер должен кодировать изображения мгновенно при каждом запросе, MozJPEG может быть тяжелее, чем более быстрые решения. Если же изображения кодируются заранее и кэшируются, его медленность часто не критична.

История версий программы
MozJPEG появился как попытка улучшить практическое JPEG-сжатие без отказа от совместимости. Первая публичная версия была представлена в 2014 году как fork libjpeg-turbo с функциональностью jpgcrush, направленной на подбор progressive coding configuration с меньшим количеством битов. Уже в раннем описании проекта акцент делался на production-quality JPEG encoder и совместимость с распространёнными декодерами.
v1.0
Ветка v1.0 заложила основу проекта: libjpeg-turbo плюс jpgcrush. Целью было уменьшение размера JPEG за счёт более эффективной progressive-конфигурации. В релизных заметках для cjpeg отдельно подчёркивалось, что его настройки в MozJPEG агрессивнее ориентированы на меньший размер, чем у аналогичной утилиты в libjpeg-turbo.
v2.0
В версии v2.0 появилась trellis quantization для уменьшения размера baseline и progressive JPEG. Также cjpeg получил поддержку JPEG-входа для более удобных recompression workflows, а ещё были добавлены настройки под метрики PSNR, PSNR-HVS-M, SSIM и MS-SSIM.
Практический смысл версии v2.0 был заметным: MozJPEG перестал быть только инструментом улучшенной progressive-структуры и стал сильнее как полноценный JPEG-энкодер для web use cases.
v2.1
В v2.1 изменилось поведение -baseline: ключ стал означать именно создание baseline mode JPEG, при этом сохраняя возможность использовать trellis quantization и другие улучшения. Также были исправления для trellis quantization в non-progressive mode, сборки на разных платформах и сообщений об ошибках cjpeg.
v3.0
v3.0 принесла заметные изменения ABI для возврата к совместимости с libjpeg-turbo, DC trellis quantization, объединение последовательных DQT и DHT markers, deringing для black-on-white text, выбор quantization tables, флаг cjpeg -version и поддержку PNG input в cjpeg.
Эта версия важна не только как набор новых функций, но и как этап стабилизации совместимости и расширения практических сценариев.
v3.1
В v3.1 улучшили эффективность DC trellis для изображений высокого качества, исправили DC overflow, связанный с overshoot deringing, устранили чтение 16-bit PNG images, исправили утечки памяти в jpegyuv и jpegtran, добавили cjpeg -quant-baseline для уменьшения размера quantization tables.
v3.2
В v3.2 проект был обновлён до libjpeg-turbo 1.5.0, получил исправления взаимодействия JINT_DC_SCAN_OPT_MODE и JBOOLEAN_OPTIMIZE_SCANS, улучшения совместимости через JPEG_C_PARAM_SUPPORTED, исправления вспомогательных инструментов yuvjpeg/jpegyuv, а cjpeg стал угадывать default -sample setting на основе -quality.
v4
Ветка v4 стала этапом синхронизации с libjpeg-turbo v2. Проект перешёл на CMake, а изменения MozJPEG были перенесены поверх новой базы libjpeg-turbo. Это важный инфраструктурный этап: он связан не с одной заметной кнопкой или опцией, а с базой сборки, совместимостью и сопровождением.
Сравнение с аналогами
libjpeg-turbo
libjpeg-turbo — самый близкий родственник MozJPEG по технической базе, но цели у них разные. libjpeg-turbo силён там, где важна скорость кодирования и декодирования. Он использует SIMD-ускорение и часто выбирается как быстрая JPEG-библиотека для приложений, серверов, просмотрщиков и систем обработки изображений.
MozJPEG больше подходит для финального веб-сжатия, когда можно потратить больше времени на кодирование ради меньшего файла. Если задача — быстро декодировать и кодировать большое количество JPEG в интерактивном приложении, libjpeg-turbo выглядит логичнее. Если задача — подготовить публичные изображения для сайта и сэкономить трафик, MozJPEG обычно интереснее.
jpegoptim
jpegoptim — удобная консольная утилита для оптимизации JPEG/JFIF. Она поддерживает lossless-оптимизацию через Huffman tables и lossy-оптимизацию с ограничением качества. Важная практическая деталь: по умолчанию jpegoptim может изменять входные файлы, а для сохранения результата в другой каталог используется отдельная опция.
По ощущениям рабочего процесса jpegoptim проще: дал файлы — получил оптимизированные файлы. MozJPEG гибче как энкодер и библиотека, лучше раскрывается в пайплайнах, где важны cjpeg, jpegtran, progressive JPEG, trellis quantization и точный контроль над кодированием.
Guetzli
Guetzli — JPEG-энкодер Google, который ориентирован на психовизуальное качество и очень плотное сжатие, но требует много CPU и памяти. Guetzli известен высокими требованиями к ресурсам и медленной обработкой крупных изображений.
Guetzli выбирают, когда важен максимальный результат на отдельных изображениях и время кодирования почти не имеет значения. MozJPEG практичнее для регулярной веб-оптимизации: он тоже может быть медленнее простых JPEG-энкодеров, но не настолько экстремален в типичных сценариях и лучше подходит для массового pipeline.
ImageOptim
ImageOptim — графический инструмент для macOS, который удобен для drag-and-drop-оптимизации. Он полезен дизайнеру, редактору или контент-менеджеру, которому не нужна командная строка. В контексте JPEG-оптимизации ImageOptim может использовать разные движки, включая MozJPEG, но пользователь работает через окно программы.
Отличие простое: ImageOptim — удобная оболочка для ручной работы, MozJPEG — низкоуровневый инструмент для контроля, автоматизации и интеграции.
Squoosh
Squoosh — веб-приложение для сжатия и сравнения изображений в браузере. Оно удобно тем, что даёт визуальный preview, ползунки и разные кодеки. Изображения обрабатываются локально в браузере, без отправки на сервер.
Squoosh хорош для одиночных файлов и ручного сравнения качества. MozJPEG лучше подходит там, где нужно не открыть сайт и подвигать ползунок, а встроить JPEG-сжатие в повторяемый процесс.
Сводная таблица
| Инструмент | Тип | Сильная сторона | Когда выбрать |
| libjpeg-turbo | библиотека/CLI | скорость | декодирование, быстрые приложения, общая JPEG-база |
| jpegoptim | CLI | простая оптимизация JPG | быстро обработать готовые JPEG |
| Guetzli | JPEG-энкодер | сильное психовизуальное сжатие | мало файлов, качество важнее времени |
| ImageOptim | GUI | удобство drag-and-drop | ручная оптимизация на macOS |
| Squoosh | веб-приложение | визуальное сравнение кодеков | одиночные изображения и подбор настроек |
| MozJPEG | библиотека/CLI | баланс размера, качества и автоматизации | веб-пайплайны, progressive JPEG, скрипты, массовая обработка |
Плюсы MozJPEG
Сильное соотношение качества и размера
MozJPEG создавался именно для уменьшения JPEG-файлов при сохранении совместимости. Его главная ценность — получить более компактный JPG без перехода на другой формат. Это особенно важно для сайтов с большой долей фотографий.
Совместимость с обычным JPEG
Результат остаётся стандартным JPEG-файлом. Не нужно проверять поддержку нового формата в браузерах, делать fallback-цепочки или менять расширения. Файл можно вставить в HTML, загрузить в CMS, отправить в CDN и открыть в обычном просмотрщике.
Хорошая автоматизация
Командная строка — минус для новичка, но плюс для системной работы. MozJPEG легко использовать в скриптах, пайплайнах, сборщиках, backend-сервисах и пакетной обработке.
Progressive JPEG
Поддержка progressive JPEG делает программу особенно полезной для веба. Большие изображения могут восприниматься быстрее, потому что пользователь видит грубую версию до полной загрузки.
Lossless-сценарии через jpegtran
jpegtran позволяет уменьшать вес готовых JPEG, удалять метаданные, оптимизировать таблицы, делать progressive-структуру, поворачивать и кадрировать без обычного повторного ухудшения качества.
Гибкая настройка
Пользователь может управлять качеством, progressive/baseline-режимом, метаданными, цветовым поведением, монохромным кодированием и рядом дополнительных параметров. Это удобно для точной настройки под разные типы изображений.
Минусы MozJPEG
Нет графического интерфейса
Для человека, который привык к кнопкам и предпросмотру, MozJPEG выглядит жёстко. Нужно работать с терминалом, файлами, путями и параметрами.
Нужна проверка качества
Нельзя просто поставить одно значение -quality и забыть. Для хорошего результата нужно сравнивать изображения. Иначе легко либо оставить слишком тяжёлый файл, либо получить заметные артефакты.
Не универсальный конвертер
MozJPEG не заменяет ImageMagick, XnConvert, Photoshop или Squoosh. Он не предназначен для полноценной работы со всеми форматами, слоями, прозрачностью, RAW, HEIC, AVIF и сложными редакторскими сценариями.
Медленнее быстрых JPEG-решений
За более плотное сжатие приходится платить временем кодирования. Для статических изображений это нормально, но для real-time-задач может быть проблемой.
JPEG остаётся JPEG
MozJPEG не превращает JPEG в безупречный современный формат. Он не добавляет прозрачность, не делает lossless-фотоформат универсальным, не отменяет артефакты при чрезмерном сжатии и не подходит для всех типов графики.
Типичные ошибки при работе
Перезапись оригиналов
Самая опасная ошибка — направить результат в тот же файл:
jpegtran -copy none -optimize input.jpg > input.jpg Так делать нельзя. Перенаправление может уничтожить файл ещё до того, как команда завершит чтение. Правильный вариант — писать в новый файл или отдельную папку:
jpegtran -copy none -optimize input.jpg > output.jpg Слепое использование -quality 100
-quality 100 редко нужен для веба. Файл становится большим, а визуальная разница часто минимальна. Для сайта лучше искать самый низкий уровень качества, который выглядит нормально в реальном размере.
Многократное перекодирование JPEG
Каждое lossy-перекодирование может ухудшать картинку. Если файл уже JPEG, сначала стоит попробовать jpegtran, а не cjpeg.
Удаление ICC-профиля без проверки
-copy none полезен, но иногда вместе с мусором удаляет важную цветовую информацию. Для товарных фото, дизайнерских материалов и изображений с критичной цветопередачей нужно проверять вариант с -copy icc.
Использование JPEG для неподходящей графики
Скриншоты, схемы, логотипы и изображения с мелким текстом часто лучше хранить в PNG, SVG, WebP или AVIF. MozJPEG хорош для JPEG-задач, но не обязан быть лучшим выбором для любого изображения.
Оценка только по размеру
Если файл уменьшился на 40%, это ещё не значит, что результат хороший. Нужно смотреть качество. Если файл уменьшился всего на 3%, это тоже не значит, что оптимизация бессмысленна: на большом сайте даже несколько процентов могут давать заметную экономию трафика.
Практические рекомендации по настройкам
Для обычных фотографий на сайте
cjpeg -quality 80 -progressive -outfile photo-web.jpg photo.bmp Это хорошая стартовая точка. Далее проверяют 75, 82, 85.
Для hero-изображений
cjpeg -quality 85 -progressive -outfile hero.jpg hero.bmp Большие изображения в первом экране сильнее влияют на восприятие качества, поэтому слишком низкое значение лучше не ставить без проверки.
Для карточек товаров
cjpeg -quality 82 -progressive -outfile product.jpg product.bmp Здесь важна детализация объекта, края, фактура и цвет.
Для превью
cjpeg -quality 74 -progressive -outfile thumb.jpg thumb.bmp Превью маленькие, поэтому можно сильнее экономить размер.
Для готовых JPEG из CMS
jpegtran -copy none -optimize -progressive input.jpg > output.jpg Это хороший безопасный старт, потому что не выполняется обычное повторное lossy-кодирование.
Для сохранения ICC
jpegtran -copy icc -optimize -progressive input.jpg > output.jpg Подходит для изображений, где цветовой профиль лучше не удалять.
Интеграция в рабочий процесс
MozJPEG хорошо вписывается в цепочку, где каждый инструмент делает свою часть:
-
Редактор или конвертер подготавливает изображение.
-
Ресайзер создаёт нужные размеры.
-
MozJPEG кодирует или оптимизирует JPG.
-
Скрипт складывает результат в папку публикации.
-
CDN отдаёт готовые файлы пользователям.
Пример структуры:
images/
source/
photo-1.jpg
photo-2.jpg
web/
photo-1.jpg
photo-2.jpg Пример команды для сборки:
mkdir -p images/web
for file in images/source/*.jpg; do
name=$(basename "$file")
jpegtran -copy none -optimize -progressive "$file" > "images/web/$name"
done Для команды разработки важно зафиксировать настройки. Если один человек сжимает фото в Squoosh на глаз, второй — в Photoshop, третий — через случайный онлайн-сервис, результат будет непредсказуемым. MozJPEG позволяет сделать процесс повторяемым.
Контроль качества после сжатия
Хороший процесс оптимизации включает не только команду, но и проверку результата.
Минимальный контроль:
| Что проверить | Зачем |
| размер файла | понять экономию |
| открытие файла | убедиться, что JPEG не повреждён |
| вид в 100% | найти явные артефакты |
| вид в реальном размере | оценить пользовательское восприятие |
| проблемные зоны | проверить лица, текст, градиенты, края |
| цвет | убедиться, что профиль не испортил отображение |
| вес страницы | оценить эффект на сайте |
Для каталога изображений можно делать выборочную проверку: не смотреть все 5000 файлов вручную, а проверить несколько типичных групп — портреты, товары на белом фоне, тёмные фото, яркие фото, изображения с текстом.
Безопасность исходников и организация файлов
MozJPEG нужно использовать так, чтобы исходные файлы не терялись. Хорошая практика:
-
хранить оригиналы отдельно;
-
не писать результат в тот же путь;
-
использовать папки
source,optimized,web,backup; -
проверять скрипты на нескольких файлах;
-
логировать ошибки;
-
не удалять исходники автоматически;
-
не применять lossy-перекодирование повторно без необходимости.
Пример безопасной структуры:
project/
images-original/
images-resized/
images-optimized/ Такой подход особенно важен для магазинов, фотобанков, портфолио и контентных сайтов, где потеря оригинала означает дополнительную работу или прямой ущерб.
Кому стоит использовать MozJPEG
MozJPEG подходит:
-
веб-разработчикам;
-
backend-разработчикам;
-
DevOps-инженерам;
-
владельцам сайтов с большим количеством изображений;
-
SEO-специалистам, работающим со скоростью загрузки;
-
администраторам интернет-магазинов;
-
редакциям и блогам;
-
разработчикам CMS-плагинов;
-
специалистам по CDN и медиапайплайнам;
-
тем, кто хочет автоматизировать сжатие JPEG.
Лучше всего программа раскрывается у пользователей, которые готовы работать с командной строкой и понимают, что оптимизация изображений — это не одно нажатие кнопки, а подбор баланса между размером, качеством и назначением файла.
Кому лучше выбрать другой инструмент
MozJPEG не лучший вариант, если нужен визуальный drag-and-drop-интерфейс. В таком случае удобнее ImageOptim, Squoosh или другой графический оптимизатор.
Не стоит выбирать MozJPEG как основной инструмент, если нужно:
-
редактировать фото;
-
делать ретушь;
-
работать со слоями;
-
массово конвертировать все возможные форматы;
-
готовить AVIF/WebP как основной формат;
-
вручную сравнивать результат ползунком;
-
обрабатывать изображения без терминала;
-
сжимать файлы прямо на глаз без скриптов.
В этих случаях MozJPEG может оставаться частью процесса, но не единственным инструментом.
Частые вопросы
Есть ли у MozJPEG графический интерфейс?
У MozJPEG нет собственного классического GUI. Основная работа идёт через командную строку и утилиты cjpeg, jpegtran, djpeg, rdjpgcom, wrjpgcom.
Можно ли сжимать PNG напрямую?
MozJPEG — инструмент для JPEG-кодирования. В отдельных версиях и сборках cjpeg может принимать PNG-вход, но логика программы всё равно сводится к созданию JPEG. Если нужен PNG-оптимизатор, лучше использовать инструменты, предназначенные именно для PNG.
Что выбрать: cjpeg или jpegtran?
Если нужно создать JPEG заново из исходника или подобрать качество — cjpeg. Если JPEG уже готов и нужно оптимизировать его без обычного повторного lossy-кодирования — jpegtran.
Нужно ли всегда использовать -progressive?
Для крупных веб-фотографий progressive JPEG часто оправдан. Для маленьких изображений разница может быть несущественной. Для максимально консервативных систем можно использовать -baseline.
Безопасно ли удалять EXIF?
Для публичных веб-копий часто да, особенно если EXIF содержит лишние данные. Но если важна цветопередача, нужно отдельно подумать об ICC-профиле и протестировать -copy icc.
Почему файл почти не уменьшился?
Возможные причины:
-
исходный JPEG уже был хорошо оптимизирован;
-
изображение содержит сложные детали;
-
качество выбрано слишком высоким;
-
сохранены метаданные;
-
файл маленький, и экономить там почти нечего;
-
используется не тот режим обработки.
Почему после сжатия появились артефакты?
Слишком низкое значение -quality, неподходящий тип изображения или повторное перекодирование уже сжатого JPEG. Нужно поднять качество, использовать jpegtran вместо cjpeg или выбрать другой формат для исходного типа графики.
Можно ли обрабатывать целую папку?
Да. Это один из главных сценариев MozJPEG. Для этого используют shell-скрипты, PowerShell, Makefile, npm scripts, CI/CD или backend-задачи.
Подходит ли MozJPEG для WordPress?
Да, как часть серверного или внешнего процесса оптимизации. Но сам по себе MozJPEG не является WordPress-плагином. Его обычно встраивают через плагины, серверные скрипты, обработчики загрузок или внешнюю подготовку изображений.
Можно ли заменить им WebP или AVIF?
Нет. MozJPEG улучшает JPEG, но не заменяет современные форматы. Его используют, когда нужен именно JPEG: для совместимости, fallback, старых систем, прямых ссылок, CMS или сценариев, где JPG остаётся обязательным.
Итоговая оценка
MozJPEG — сильный специализированный инструмент для тех, кто серьёзно относится к JPEG-оптимизации. Он не пытается быть красивым редактором, универсальным конвертером или приложением перетащи картинку и нажми кнопку. Его сильная сторона — эффективное JPEG-сжатие, progressive JPEG, trellis quantization, lossless-оптимизация через jpegtran, автоматизация и совместимость с обычными браузерами.
Для новичка MozJPEG может показаться сухим и неудобным, потому что вся работа происходит через команды. Для веб-разработчика, администратора сайта или инженера, который готовит изображения системно, это преимущество: настройки можно зафиксировать, повторить, встроить в пайплайн и применять к тысячам файлов.
Лучший сценарий использования MozJPEG — финальная подготовка JPEG для веба. Исходники редактируются в другом инструменте, размеры приводятся заранее, а MozJPEG отвечает за компактный, совместимый и хорошо оптимизированный JPG. Именно в этой роли программа остаётся одним из самых полезных инструментов для сжатия изображений и ускорения загрузки сайтов.

