Jpegoptim: программа для оптимизации JPEG
Jpegoptim — специализированная программа для оптимизации JPEG/JFIF-изображений через командную строку. Она не пытается быть универсальным фоторедактором, не открывает фотографии в окне предпросмотра, не предлагает кисти, фильтры, кадрирование или цветокоррекцию. Её задача гораздо уже и конкретнее: уменьшить размер JPEG-файла, сохранить или удалить метаданные, применить lossless-оптимизацию либо пересжать изображение с заданным пределом качества.
Скачать Jpegoptim
Для сжатия и оптимизации файлов
⬇ Скачать ФотоМАСТЕР бесплатно
⬇ Скачать Jpegoptim бесплатно
Главная ценность Jpegoptim раскрывается там, где нужно обработать не одну картинку вручную, а десятки, сотни или тысячи JPEG-файлов: папку сайта, выгрузку карточек товаров, медиатеку CMS, архив скриншотов, каталог изображений перед публикацией или набор фотографий перед загрузкой на сервер. Программа хорошо вписывается в рабочие процессы Linux, macOS и серверных Unix-подобных окружений, потому что запускается одной командой, легко комбинируется с find, xargs, shell-скриптами и cron-задачами.
В отличие от визуальных компрессоров, Jpegoptim не показывает ползунок качества в отдельном окне и не рисует сравнение до и после. Вместо этого пользователь управляет программой через параметры: --max, --size, --strip-all, --dest, --preserve, --all-progressive, --auto-mode, --files-stdin, --workers и другие ключи. Такой подход особенно удобен для автоматизации: однажды подобранная команда может применяться к новым файлам без ручной настройки.
Jpegoptim стоит рассматривать именно как технический инструмент для JPEG-оптимизации. Он не заменяет ImageMagick, Photoshop, GIMP, Squoosh или ImageOptim, но отлично закрывает свой участок работы: уменьшение веса JPG, очистка EXIF/XMP/IPTC/ICC-данных, пакетная обработка и подготовка изображений для сайта.
Содержание
- 1 Краткая характеристика Jpegoptim
- 2 Чем Jpegoptim отличается от обычных программ для сжатия изображений
- 3 Установка Jpegoptim
- 4 Интерфейс программы: команды, параметры и вывод терминала
- 5 Базовая оптимизация JPEG без указания качества
- 6 Сохранение результата в отдельную папку через --dest
- 7 Управление качеством через --max
- 8 Сжатие JPEG до целевого размера через --size
- 9 Удаление метаданных: EXIF, IPTC, XMP, ICC и комментарии
- 10 Сохранение нужных метаданных через --keep-*
- 11 Progressive JPEG, baseline JPEG и автоматический выбор режима
- 12 Пакетная обработка нескольких JPEG-файлов
- 13 Работа со списками файлов: --files-from и --files-stdin
- 14 Безопасная проверка через --noaction
- 15 Сохранение времени изменения и прав доступа
- 16 Вывод статистики, CSV, тихий и подробный режим
- 17 Параллельная обработка через --workers
- 18 Режим повторной компрессии --retry
- 19 Работа со стандартным вводом и выводом
- 20 Использование Jpegoptim на сервере
- 21 Использование в автоматизации и CI/CD
- 22 Качество изображения: что делает Jpegoptim, а что не делает
- 23 Практическая инструкция: как сжать JPEG для сайта
- 24 Практическая инструкция: как очистить JPEG от метаданных
- 25 Практическая инструкция: как обработать все JPEG в каталоге рекурсивно
- 26 Преимущества Jpegoptim
- 27 Недостатки и ограничения
- 28 Типичные ошибки при работе с Jpegoptim
- 29 Для кого подходит Jpegoptim
- 30 Сравнение с аналогами
- 31 Реальные сценарии использования Jpegoptim
- 32 Безопасный набор команд для новичка
- 33 Итоговая оценка Jpegoptim
Краткая характеристика Jpegoptim
| Параметр | Описание |
|---|---|
| Название | Jpegoptim |
| Тип программы | консольная утилита для оптимизации JPEG/JFIF |
| Основная задача | уменьшение размера JPEG-файлов |
| Интерфейс | командная строка |
| Основные режимы | lossless-оптимизация и lossy-сжатие |
| Поддерживаемые входные файлы | JPEG, JPG, JFIF |
| Работа с метаданными | удаление или сохранение EXIF, IPTC, XMP, ICC, COM, JFIF/JFXX, Adobe APP-маркеров |
| Пакетная обработка | есть, через список файлов, маски, find, xargs, --files-from, --files-stdin |
| Сохранение результата | поверх исходного файла или в отдельную папку через --dest |
| Подходит для серверов | да |
| Графический интерфейс | нет |
| Лицензия | GPL |
| Основная аудитория | веб-разработчики, администраторы, SEO-специалисты, пользователи Linux/macOS, владельцы сайтов |
Jpegoptim работает с уже существующими JPEG-файлами. Программа не занимается изменением разрешения, не делает ресайз, не конвертирует изображения в WebP или AVIF, не исправляет экспозицию и не применяет художественные эффекты. Она оптимизирует структуру JPEG и при необходимости пересжимает изображение с заданным ограничением качества.
Это важно понимать перед использованием: если фотография весит много из-за огромного разрешения, Jpegoptim может уменьшить файл, но не заменит ресайз. Для уменьшения размеров в пикселях обычно используют ImageMagick, GraphicsMagick, GIMP, Photoshop, XnConvert или встроенные инструменты CMS. Jpegoptim включается на следующем этапе — когда изображение уже имеет нужные размеры, но его нужно сделать легче.
Чем Jpegoptim отличается от обычных программ для сжатия изображений
Многие программы для уменьшения размера изображений строятся вокруг графического интерфейса: пользователь открывает файл, выбирает качество, смотрит предпросмотр и нажимает кнопку экспорта. Jpegoptim устроен иначе. Здесь нет кнопки Compress, нет меню File → Export, нет панели слоёв и окна настроек сохранения. Вся работа выражается командой.
Базовый пример выглядит так:
jpegoptim photo.jpg
Эта команда запускает оптимизацию файла photo.jpg. Если программа сможет уменьшить файл, она перезапишет его оптимизированной версией. Если файл уже хорошо оптимизирован и результат не получается меньше исходника, Jpegoptim пропустит его и покажет это в выводе.
Такой минимализм делает программу быстрой и предсказуемой. Пользователь сразу видит, что именно запускается, какие параметры применяются и какие файлы попадают в обработку. Для ручной работы с одной фотографией GUI-программа может быть удобнее, но для серверной папки с тысячами JPG-файлов командная строка оказывается практичнее.
Установка Jpegoptim
В большинстве Linux-дистрибутивов Jpegoptim устанавливается через стандартный пакетный менеджер. На Ubuntu, Debian и совместимых системах используется команда:
sudo apt install jpegoptim

На Fedora команда обычно выглядит так:
sudo dnf install jpegoptim
На системах, где используется yum, установка может выполняться так:
sudo yum install jpegoptim
На macOS удобно использовать Homebrew:
brew install jpegoptim
После установки стоит проверить, что команда доступна в терминале:
jpegoptim --version
или открыть краткую справку:
jpegoptim --help
Справка показывает синтаксис запуска, основные параметры обработки, опции перезаписи, управление качеством, удаление метаданных и режимы вывода.

Если команда jpegoptim не находится, проблема обычно связана не с самой программой, а с установкой пакета или переменной PATH. В такой ситуации сначала проверяют, установлен ли пакет, затем — где находится бинарный файл:
which jpegoptim
или:
command -v jpegoptim
Интерфейс программы: команды, параметры и вывод терминала
Jpegoptim — консольная программа, поэтому её интерфейс состоит из нескольких элементов:
| Элемент | Что означает |
|---|---|
jpegoptim |
имя исполняемой команды |
[options] |
параметры обработки |
[filenames] |
один или несколько файлов JPEG |
| stdout/stderr | текстовый вывод в терминале |
| код завершения | результат выполнения для скриптов |
справка --help |
встроенный список параметров |
Общий синтаксис:
jpegoptim [options] [filenames]
Пример с одним файлом:
jpegoptim image.jpg
Пример с несколькими файлами:
jpegoptim image1.jpg image2.jpg image3.jpg
Пример с маской:
jpegoptim *.jpg
Пример с параметрами:
jpegoptim --max=85 --strip-all *.jpg
Вывод программы обычно содержит имя файла, параметры изображения, статус обработки, исходный размер, новый размер и процент экономии. Пример строки результата:
image.jpg 720x450 24bit N JFIF [OK] 50882 --> 50155 bytes (1.43%), optimized.
В этой строке видно:
| Фрагмент вывода | Значение |
|---|---|
image.jpg |
имя обработанного файла |
720x450 |
разрешение изображения |
24bit |
глубина цвета |
N |
normal, то есть непострочный JPEG |
JFIF |
обнаруженный маркер JPEG/JFIF |
[OK] |
файл корректно прочитан и обработан |
50882 --> 50155 bytes |
размер до и после |
(1.43%) |
процент уменьшения |
optimized |
файл был оптимизирован |

Такой формат вывода удобен тем, что не требует отдельного отчёта. После запуска сразу видно, какие изображения действительно уменьшились, а какие были пропущены.
Базовая оптимизация JPEG без указания качества
Самый простой режим Jpegoptim — запуск без дополнительных параметров:
jpegoptim photo.jpg
В этом режиме программа выполняет lossless-оптимизацию. Она не задаёт новое качество JPEG через --max и не пытается достичь целевого размера через --size. Основная идея — уменьшить файл за счёт оптимизации внутренних таблиц JPEG и служебной структуры файла без принудительного ухудшения изображения.
Такой запуск хорошо подходит для первого знакомства с программой, но у него есть важная особенность: Jpegoptim по умолчанию изменяет исходный файл, если результат оптимизации получается меньше. Это нормальное поведение для утилиты, рассчитанной на автоматизацию, но для первого запуска лучше использовать копию файла.
Безопасный вариант:
cp photo.jpg photo-test.jpgjpegoptim photo-test.jpg
После этого можно сравнить размер:
ls -lh photo.jpg photo-test.jpg
Если экономия небольшая, это не значит, что программа работает плохо. JPEG-файлы часто уже бывают сохранены достаточно эффективно, особенно если они экспортированы современным редактором или обработаны другим оптимизатором. В lossless-режиме Jpegoptim не обязан уменьшать каждый файл на десятки процентов. Его задача — убрать лишнее там, где это возможно, и не делать файл хуже.
Типичные результаты в lossless-режиме:
| Ситуация | Что покажет Jpegoptim |
|---|---|
| Файл можно уменьшить | optimized |
| Файл уже оптимизирован | skipped |
| Новый файл получился бы больше | файл не заменяется |
| Файл повреждён или не JPEG | выводится ошибка или предупреждение |
| Файл является симлинком или специальным файлом | такие объекты не обрабатываются как обычные изображения |
Сохранение результата в отдельную папку через --dest
Для безопасной работы с оригиналами используется параметр --dest. Он задаёт папку, куда Jpegoptim сохранит оптимизированные копии:
mkdir -p optimizedjpegoptim --dest=optimized photo.jpg
Короткая форма:
jpegoptim -d optimized photo.jpg
Такой вариант особенно удобен, когда нужно проверить результат перед заменой изображений на сайте. Исходный файл остаётся в старой папке, а оптимизированная версия появляется в каталоге optimized.
Важно учитывать поведение Jpegoptim: если файл не удалось уменьшить, оптимизированная копия в папке назначения может не появиться. Это логично: программа не сохраняет идентичную копию только ради самого факта обработки. Поэтому при использовании --dest нужно смотреть вывод терминала, а не только проверять наличие файлов в новой папке.
Практический сценарий:
mkdir -p optimizedjpegoptim --dest=optimized --max=85 --strip-all *.jpg
Эта команда берёт все JPG-файлы в текущем каталоге, применяет ограничение качества 85, удаляет метаданные и сохраняет уменьшенные версии в папку optimized.
Для рабочих сайтов и архивов лучше начинать именно с такого подхода: сначала копии, потом проверка качества, затем замена оригиналов только после визуального контроля.
Управление качеством через --max
Параметр --max включает lossy-сценарий. Он задаёт максимальный фактор качества, выше которого Jpegoptim не будет сохранять изображение:
jpegoptim --max=85 photo.jpg
Короткая форма:
jpegoptim -m85 photo.jpg
Значение качества находится в диапазоне от 0 до 100. На практике слишком низкие значения почти всегда дают заметные артефакты: блоки, замыленные детали, грязь на градиентах, ухудшение текста на скриншотах. Поэтому для сайта часто начинают с диапазона 80–90, а затем проверяют результат визуально.
Значение --max |
Практический смысл |
|---|---|
--max=95 |
очень осторожное сжатие, крупный файл остаётся сравнительно качественным |
--max=90 |
мягкий вариант для фотографий и иллюстраций |
--max=85 |
частый компромисс для веб-изображений |
--max=80 |
заметнее уменьшает размер, требует проверки |
--max=70 |
агрессивное сжатие, подходит не для всех изображений |
ниже 70 |
риск сильных JPEG-артефактов |
Пример:
jpegoptim --max=85 product-photo.jpg
Если исходный JPEG уже был сохранён с качеством ниже 85, Jpegoptim не будет дополнительно пересжимать его как более качественный файл. В таком случае программа применит lossless-оптимизацию, если она возможна. Это делает --max удобным для смешанных папок: файлы с избыточным качеством будут пересжаты, а уже сжатые изображения не будут ухудшаться без необходимости.
Для публикации на сайте разумная команда часто выглядит так:
jpegoptim --max=85 --strip-all image.jpg
Она сочетает два действия: ограничивает качество и удаляет метаданные. Но использовать её по оригиналам без копии не стоит, потому что оба действия необратимы в рамках обработанного файла.
Сжатие JPEG до целевого размера через --size
Параметр --size помогает, когда важен не абстрактный уровень качества, а конкретный размер файла. Например, изображение должно быть не больше 200 КБ для формы загрузки, карточки товара или ограничений CMS.
Пример с размером в килобайтах:
jpegoptim --size=200k photo.jpg
Пример с процентом от исходного размера:
jpegoptim --size=50% photo.jpg
Короткая форма:
jpegoptim -S200k photo.jpg
При использовании --size программа пытается подобрать такое сжатие, чтобы приблизиться к заданному ограничению. Этот режим отключает чистую lossless-оптимизацию, потому что достижение конкретного размера часто требует пересжатия с потерями.
--size полезен в задачах, где есть жёсткое ограничение:
-
загрузка изображений в систему, принимающую файлы до определённого веса;
-
подготовка картинок для старых CMS;
-
публикация иллюстраций в каталогах, где указан максимальный размер JPG;
-
уменьшение изображений для email-рассылок;
-
подготовка JPEG для мобильных страниц.
Но этот режим требует аккуратности. Если исходное изображение большое, детализированное или содержит текст, попытка уместить его в слишком маленький размер приведёт к заметной деградации. Jpegoptim выполнит техническую задачу, но визуальное качество должен оценивать пользователь.
Хороший порядок работы:
cp photo.jpg photo-test.jpgjpegoptim --size=200k photo-test.jpg
Затем проверить:
ls -lh photo-test.jpg
И открыть изображение в просмотрщике или браузере. Если качество приемлемое, параметр можно применять к группе файлов.
Удаление метаданных: EXIF, IPTC, XMP, ICC и комментарии
Одна из сильных сторон Jpegoptim — управление JPEG-маркерами и метаданными. В фотографиях часто остаются EXIF-данные камеры, дата съёмки, параметры объектива, координаты GPS, XMP-профили, IPTC-описания, комментарии и ICC-профили. Иногда эти данные нужны, но для веб-публикации они часто только увеличивают размер файла.
Полное удаление большинства служебных данных выполняется так:
jpegoptim --strip-all photo.jpg
Короткая форма:
jpegoptim -s photo.jpg
Отдельные виды метаданных можно удалять точечно:
jpegoptim --strip-exif photo.jpg
jpegoptim --strip-xmp photo.jpg
jpegoptim --strip-iptc photo.jpg
jpegoptim --strip-icc photo.jpg
jpegoptim --strip-com photo.jpg
| Параметр | Что делает |
|---|---|
--strip-all |
удаляет все управляемые служебные маркеры, кроме тех, которые сохраняются или создаются кодировщиком |
--strip-exif |
удаляет EXIF-данные |
--strip-iptc |
удаляет IPTC/Adobe Photoshop APP13-данные |
--strip-xmp |
удаляет XMP-профили |
--strip-icc |
удаляет ICC-профиль |
--strip-com |
удаляет JPEG-комментарии |
--strip-jfif |
удаляет JFIF-маркеры |
--strip-jfxx |
удаляет JFIF Extension-маркеры |
--strip-adobe |
удаляет Adobe APP-маркеры |
Самый популярный вариант для сайтов:
jpegoptim --max=85 --strip-all image.jpg
Эта команда уменьшает вес изображения двумя способами: пересжимает JPEG при необходимости и удаляет служебные блоки. Для карточек товаров, изображений в статьях, галерей и иллюстраций это часто даёт хороший результат.
Однако --strip-all не всегда нужно использовать бездумно. Например, ICC-профиль может быть важен для корректной цветопередачи, а EXIF может быть нужен фотографу, архиву или каталогу, где сохраняются технические данные съёмки. Если цвет и метаданные важны, лучше удалять только то, что действительно лишнее:
jpegoptim --strip-exif --strip-xmp --strip-com photo.jpg
Такой вариант очищает часть служебной информации, но не трогает ICC-профиль.
Сохранение нужных метаданных через --keep-*
Jpegoptim позволяет не только удалять метаданные, но и задавать исключения. Это удобно, когда нужно очистить файл почти полностью, но оставить отдельные блоки.
Пример:
jpegoptim --strip-all --keep-exif photo.jpg
Команда удаляет всё, что попадает под --strip-all, но сохраняет EXIF. Аналогично можно сохранять IPTC, XMP, ICC, комментарии и другие маркеры:
jpegoptim --strip-all --keep-exif --keep-icc photo.jpg
Практический смысл таких комбинаций:
| Задача | Подход |
|---|---|
| Фотографический архив | сохранить EXIF, возможно ICC |
| Веб-каталог товаров | удалить EXIF/XMP/COM, часто сохранить ICC |
| Публичная публикация фото | удалить GPS и лишние служебные данные |
| Иллюстрации для статей | использовать --strip-all после проверки цвета |
| Скриншоты интерфейсов | обычно можно удалять почти все метаданные |
Jpegoptim удобен тем, что позволяет выразить политику метаданных прямо в команде. Для разовой ручной обработки это может выглядеть избыточно, но для регулярной публикации изображений такой подход помогает поддерживать единый стандарт.
Progressive JPEG, baseline JPEG и автоматический выбор режима
JPEG-файлы могут быть обычными baseline/non-progressive или progressive. Progressive JPEG загружается постепенно: сначала появляется грубое изображение, затем оно уточняется по мере загрузки. Для веб-страниц это может быть полезно, особенно при медленном соединении.
Jpegoptim умеет принудительно переводить файлы в progressive-режим:
jpegoptim --all-progressive photo.jpg
Обратный вариант — сделать файлы non-progressive:
jpegoptim --all-normal photo.jpg
Есть и автоматический режим:
jpegoptim --auto-mode photo.jpg
--auto-mode выбирает progressive или non-progressive в зависимости от того, какой вариант даёт меньший итоговый файл. Это хороший вариант для пакетной оптимизации, когда не нужно вручную решать судьбу каждого изображения.
| Параметр | Поведение |
|---|---|
--all-progressive |
принудительно делает выходные JPEG progressive |
--all-normal |
принудительно делает выходные JPEG non-progressive |
--auto-mode |
выбирает режим по меньшему размеру |
| без этих параметров | сохраняет исходный режим progressive/non-progressive |
Для сайта часто используют progressive JPEG, но это не абсолютное правило. Если важна максимальная предсказуемость, можно сохранить исходный режим. Если важен меньший вес файла, стоит протестировать --auto-mode.
Пример команды для веб-папки:
jpegoptim --max=85 --strip-all --auto-mode *.jpg
Пакетная обработка нескольких JPEG-файлов
Пакетная обработка — один из главных сценариев Jpegoptim. Программа хорошо подходит для ситуаций, когда нужно обработать сразу много файлов без открытия каждого изображения вручную.
Самый простой вариант:
jpegoptim *.jpg
Команда обработает все файлы с расширением .jpg в текущей папке. Если есть файлы .jpeg, можно запустить отдельно:
jpegoptim *.jpeg
Или указать несколько масок:
jpegoptim *.jpg *.jpeg
Частый вариант для сайта:
jpegoptim --max=85 --strip-all *.jpg

В выводе видно, какие файлы уменьшились, какие были пропущены и какой процент экономии получился. Такой режим удобен для папок с изображениями статей, карточками товаров, миниатюрами, баннерами и фотографиями.
Для рекурсивной обработки вложенных папок используется find:
find ./images -type f -iname "*.jpg" -exec jpegoptim --max=85 --strip-all {} \;
Более универсальный вариант для .jpg и .jpeg:
find ./images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -exec jpegoptim --max=85 --strip-all {} \;
Команда проходит по каталогу ./images, ищет JPEG-файлы и передаёт каждый найденный файл в Jpegoptim. Это стандартный рабочий сценарий для серверов и локальных проектов.
Для ускорения можно использовать xargs:
find ./images -type f -iname "*.jpg" -print0 | xargs -0 jpegoptim --max=85 --strip-all
-print0 и xargs -0 нужны, чтобы корректно обрабатывать имена файлов с пробелами, скобками и другими специальными символами.
Работа со списками файлов: --files-from и --files-stdin
Jpegoptim умеет читать список файлов из отдельного файла или из стандартного ввода. Это удобно, когда набор изображений заранее отобран по размеру, дате, каталогу или результатам другого скрипта.
Пример со списком в файле:
find ./images -type f -iname "*.jpg" > jpg-list.txtjpegoptim --files-from=jpg-list.txt --max=85 --strip-all
В файле jpg-list.txt будет список путей, по одному файлу на строку. Jpegoptim прочитает его и обработает указанные изображения.
Вариант через стандартный ввод:
find ./images -type f -iname "*.jpg" | jpegoptim --files-stdin --max=85 --strip-all
Такой способ хорошо подходит для автоматизации. Например, можно выбрать только файлы больше 500 КБ:
find ./images -type f -iname "*.jpg" -size +500k | jpegoptim --files-stdin --max=85 --strip-all
Или только изображения, изменённые за последние сутки:
find ./images -type f -iname "*.jpg" -mtime -1 | jpegoptim --files-stdin --max=85 --strip-all
Это делает Jpegoptim удобным инструментом для регулярной обработки новых файлов, а не только для разовой оптимизации старого архива.
Безопасная проверка через --noaction
Перед массовой обработкой полезно оценить результат без записи файлов. Для этого используется параметр --noaction:
jpegoptim --noaction --max=85 photo.jpg
Короткая форма:
jpegoptim -n -m85 photo.jpg
В этом режиме Jpegoptim показывает, что он сделал бы с файлом, но не сохраняет результат. Это особенно полезно при подборе качества:
jpegoptim --noaction --max=90 photo.jpgjpegoptim --noaction --max=85 photo.jpgjpegoptim --noaction --max=80 photo.jpg
После сравнения можно выбрать подходящий параметр и запустить реальную обработку.
Для папки:
jpegoptim --noaction --max=85 --strip-all *.jpg
Такой тест помогает понять, будет ли заметная экономия и какие файлы Jpegoptim собирается пересжимать. Для больших каталогов можно сначала запустить проверку на нескольких изображениях, затем на всей папке, и только после этого применить команду без --noaction.
Сохранение времени изменения и прав доступа
При оптимизации файлов на сайте важны не только байты, но и служебные атрибуты. Дата изменения файла может участвовать в кэшировании, синхронизации, резервном копировании и деплое. Для сохранения времени изменения используется параметр --preserve:
jpegoptim --preserve photo.jpg
Короткая форма:
jpegoptim -p photo.jpg
При пакетной обработке сайта это особенно полезно:
find ./uploads -type f -iname "*.jpg" -exec jpegoptim --max=85 --strip-all --preserve {} \;
Права доступа сохраняются через --preserve-perms:
jpegoptim --preserve-perms photo.jpg
Этот параметр важен при обработке файлов, где владелец, группа и права доступа имеют значение. На сервере это может быть каталог, которым управляет веб-сервер, FTP-пользователь, CMS или система деплоя.
Для обычной локальной папки --preserve-perms нужен редко. Для серверов он полезен, но применять его нужно осознанно, особенно если оптимизация запускается от имени администратора или в каталоге с разными владельцами файлов.
Вывод статистики, CSV, тихий и подробный режим
Jpegoptim можно использовать не только для обработки файлов, но и для получения отчёта. Для суммарной статистики после обработки используется --totals:
jpegoptim --totals *.jpg
Короткая форма:
jpegoptim -t *.jpg
Для CSV-вывода:
jpegoptim --csv *.jpg
Короткая форма:
jpegoptim -b *.jpg
CSV-режим полезен, если результат нужно сохранить в лог, импортировать в таблицу или обработать скриптом:
jpegoptim --csv --max=85 --strip-all *.jpg > jpegoptim-report.csv
Тихий режим:
jpegoptim --quiet *.jpg
Короткая форма:
jpegoptim -q *.jpg
Он подходит для cron-задач и автоматических процессов, где лишний вывод не нужен.
Подробный режим:
jpegoptim --verbose photo.jpg
Короткая форма:
jpegoptim -v photo.jpg
Он помогает при диагностике: видно больше информации о процессе обработки, маркерах и поведении программы.
| Режим | Для чего нужен |
|---|---|
--totals |
итоговая статистика по группе файлов |
--csv |
машинно-читаемый отчёт |
--quiet |
минимум вывода |
--verbose |
подробная диагностика |
| обычный вывод | повседневная ручная работа |
Параллельная обработка через --workers
В современных версиях Jpegoptim есть параметр --workers, который задаёт максимальное число параллельных процессов:
jpegoptim --workers=4 --max=85 --strip-all *.jpg
Короткая форма:
jpegoptim -w4 --max=85 --strip-all *.jpg
Это полезно при обработке больших каталогов на многоядерном процессоре. Вместо последовательной оптимизации одного файла за другим Jpegoptim может запускать несколько рабочих процессов.
Но использовать --workers нужно с учётом нагрузки. На рабочем сервере с сайтом не стоит бездумно ставить максимально возможное число потоков. Оптимизация JPEG нагружает процессор и дисковую систему, особенно если файлов много. Для локального компьютера можно использовать больше рабочих процессов, для VPS — начинать с умеренных значений вроде 2 или 4.
Пример для локального проекта:
find ./public/images -type f -iname "*.jpg" | jpegoptim --files-stdin --workers=4 --max=85 --strip-all
Режим повторной компрессии --retry
Параметр --retry заставляет Jpegoptim повторять попытки сжатия до тех пор, пока итоговый файл перестаёт уменьшаться:
jpegoptim --retry --max=85 photo.jpg
Короткая форма:
jpegoptim -r -m85 photo.jpg
Этот режим может дать несколько дополнительных байтов экономии, но требует больше процессорного времени. Он имеет смысл только в сочетании с --max или --size, потому что работает в сценариях, где есть lossy-пересжатие или целевой размер.
На практике --retry не является обязательным параметром для ежедневной работы. Его используют, когда нужно выжать чуть более компактный результат и дополнительное время обработки не критично.
Работа со стандартным вводом и выводом
Jpegoptim может читать изображение из stdin и отправлять результат в stdout. Это нужно в скриптах и пайплайнах, где файл передаётся между программами без промежуточной записи.
Пример:
cat photo.jpg | jpegoptim --stdin > optimized.jpg
Более привычный вариант:
jpegoptim --stdout photo.jpg > optimized.jpg
--stdout отправляет оптимизированное изображение в стандартный вывод. Такой режим удобен для сложных цепочек обработки, но для обычной оптимизации папки он не нужен. В повседневных задачах проще использовать --dest, чтобы сохранять результат в отдельную директорию.
Использование Jpegoptim на сервере
Jpegoptim особенно полезен на VPS и выделенных серверах. Типичная ситуация: на сайте накопилась папка /uploads, где лежат тысячи JPEG-файлов. Часть изображений загружалась без оптимизации, часть экспортировалась из редакторов с лишними EXIF/XMP-данными, часть слишком тяжёлая для веб-страниц. Jpegoptim позволяет обработать такой каталог без скачивания файлов на локальный компьютер.
Пример команды для каталога сайта:
find /var/www/site/uploads -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -exec jpegoptim --max=85 --strip-all --preserve {} \;
Что делает команда:
| Фрагмент | Значение |
|---|---|
find /var/www/site/uploads |
ищет файлы в каталоге загрузок |
-type f |
берёт только обычные файлы |
-iname "*.jpg" |
ищет JPG без учёта регистра |
-o -iname "*.jpeg" |
добавляет расширение JPEG |
-exec jpegoptim ... {} \; |
запускает Jpegoptim для каждого найденного файла |
--max=85 |
ограничивает качество |
--strip-all |
удаляет метаданные |
--preserve |
сохраняет время изменения |
Перед запуском по рабочему сайту нужен тест. Лучше сначала обработать копию небольшой папки:
mkdir -p /tmp/jpeg-testcp /var/www/site/uploads/example/*.jpg /tmp/jpeg-test/jpegoptim --max=85 --strip-all --preserve /tmp/jpeg-test/*.jpg
После проверки качества можно запускать обработку шире. Для больших папок стоит использовать screen или tmux, чтобы процесс не прервался при разрыве SSH-сессии.
Использование в автоматизации и CI/CD
Jpegoptim хорошо подходит для автоматизации, потому что его поведение полностью задаётся командой. Его можно встроить в локальный скрипт, pre-deploy-процесс, сборку статического сайта, обработку ассетов перед публикацией или регулярную задачу на сервере.
Пример простого shell-скрипта:
#!/bin/shfind ./public/images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | \xargs -0 jpegoptim --max=85 --strip-all --preserve
Такой скрипт можно сохранить как optimize-jpegs.sh, сделать исполняемым:
chmod +x optimize-jpegs.sh
и запускать перед загрузкой проекта:
./optimize-jpegs.sh
Для папки с исходниками безопаснее писать в отдельный каталог:
mkdir -p ./optimizedjpegoptim --dest=./optimized --max=85 --strip-all ./source/*.jpg
Для регулярной серверной задачи можно использовать команду, которая обрабатывает только новые файлы:
find /var/www/site/uploads -type f -iname "*.jpg" -mtime -1 -print0 | \xargs -0 jpegoptim --max=85 --strip-all --preserve
Такой подход уменьшает нагрузку: Jpegoptim не проходит заново весь архив, а работает только с недавно изменёнными изображениями.
Качество изображения: что делает Jpegoptim, а что не делает
Jpegoptim не анализирует изображение как визуальный редактор и не показывает интерактивное сравнение. Он выполняет техническую оптимизацию JPEG-контейнера и при необходимости пересжимает файл. Поэтому важно разделять два режима.
Lossless-оптимизация не должна ухудшать вид изображения. В этом режиме Jpegoptim оптимизирует внутреннее представление JPEG, но не задаёт новое качество через --max.
Lossy-сжатие изменяет изображение, потому что файл пересохраняется с ограничением качества или целевым размером. Визуально результат может быть почти незаметным, если параметры подобраны аккуратно, но это уже необратимое сжатие.
| Режим | Команда | Влияние на качество |
|---|---|---|
| Lossless | jpegoptim photo.jpg |
без принудительного ухудшения |
| Lossless + удаление метаданных | jpegoptim --strip-all photo.jpg |
пиксели не пересжимаются из-за качества, но метаданные удаляются |
| Lossy по качеству | jpegoptim --max=85 photo.jpg |
возможно визуальное ухудшение |
| Lossy по размеру | jpegoptim --size=200k photo.jpg |
качество зависит от целевого размера |
| Progressive-конверсия | jpegoptim --all-progressive photo.jpg |
меняет способ хранения/загрузки JPEG |
Jpegoptim не выполняет:
-
ресайз изображения;
-
кадрирование;
-
поворот по EXIF-ориентации;
-
удаление шума;
-
повышение резкости;
-
цветокоррекцию;
-
конвертацию в WebP, AVIF, PNG;
-
визуальное сравнение качества;
-
пакетное переименование файлов.
Если нужно уменьшить изображение с 6000×4000 до 1600×1067 пикселей, сначала используют инструмент для изменения разрешения, а потом Jpegoptim для финальной оптимизации JPEG.
Практическая инструкция: как сжать JPEG для сайта
Для сайта важно не только уменьшить вес, но и не испортить изображения. Поэтому лучший порядок работы — не запускать агрессивную команду по оригиналам сразу, а пройти несколько шагов.
Сначала создаётся тестовая папка:
mkdir -p test-jpegoptimcp ./images/*.jpg ./test-jpegoptim/cd test-jpegoptim
Затем выполняется пробная обработка без записи:
jpegoptim --noaction --max=85 --strip-all *.jpg
Если вывод показывает разумную экономию, можно сохранить результат в отдельную папку:
mkdir -p optimizedjpegoptim --dest=optimized --max=85 --strip-all *.jpg
После этого нужно открыть несколько файлов из optimized и сравнить их с оригиналами. Особенно важно проверить:
-
лица и кожу на фотографиях;
-
мелкий текст на скриншотах;
-
однотонные градиенты;
-
тёмные участки;
-
красные и синие насыщенные области;
-
изображения с логотипами;
-
товарные фото на белом фоне.
Если качество устраивает, команду можно применить к рабочему каталогу. Для аккуратной веб-оптимизации часто подходит такой вариант:
find ./images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -exec jpegoptim --max=85 --strip-all --preserve {} \;
Для более осторожного подхода можно оставить ICC-профиль:
find ./images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -exec jpegoptim --max=85 --strip-exif --strip-xmp --strip-com --preserve {} \;
Такой вариант уменьшает служебные данные, но не удаляет цветовой профиль.
Практическая инструкция: как очистить JPEG от метаданных
Если задача — не столько пересжать изображение, сколько убрать лишние данные, можно использовать Jpegoptim без --max.
Полная очистка:
jpegoptim --strip-all photo.jpg
Более осторожная очистка:
jpegoptim --strip-exif --strip-xmp --strip-com photo.jpg
Очистка с сохранением времени изменения:
jpegoptim --strip-exif --strip-xmp --strip-com --preserve photo.jpg
Пакетная очистка папки:
jpegoptim --strip-all --preserve *.jpg
Рекурсивная очистка каталога:
find ./uploads -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -exec jpegoptim --strip-all --preserve {} \;
Такой сценарий полезен для публичных изображений, где не нужны данные камеры, дата съёмки, служебные комментарии и XMP-блоки. Для фотографических архивов лучше не удалять всё подряд, а заранее определить, какие метаданные должны остаться.
Практическая инструкция: как обработать все JPEG в каталоге рекурсивно
Рекурсивная обработка нужна, когда изображения лежат не в одной папке, а в структуре каталогов. Например:
uploads/├── 2024/│ ├── 01/│ └── 02/├── 2025/│ ├── 03/│ └── 04/└── products/
Команда:
find ./uploads -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -exec jpegoptim --max=85 --strip-all --preserve {} \;
Разбор:
| Часть команды | Назначение |
|---|---|
find ./uploads |
начать поиск в папке uploads |
-type f |
брать только файлы |
\( и \) |
сгруппировать условия поиска |
-iname "*.jpg" |
найти .jpg без учёта регистра |
-o -iname "*.jpeg" |
добавить .jpeg |
-exec ... {} \; |
выполнить команду для каждого файла |
{} |
место, куда подставляется путь к найденному файлу |
--max=85 |
ограничение качества |
--strip-all |
удаление метаданных |
--preserve |
сохранение времени изменения |
Если файлов очень много, можно использовать xargs:
find ./uploads -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | \xargs -0 jpegoptim --max=85 --strip-all --preserve
Этот вариант лучше работает с большим количеством файлов и корректно обрабатывает пробелы в именах.
Преимущества Jpegoptim
Jpegoptim силён не количеством функций, а точностью выполнения конкретной задачи. Это программа для тех, кому нужно быстро и предсказуемо оптимизировать JPEG.
Главные преимущества:
-
Узкая специализация. Программа занимается именно JPEG/JFIF-оптимизацией, поэтому не перегружена лишними функциями.
-
Простой синтаксис. Для базовой обработки достаточно команды
jpegoptim file.jpg. -
Lossless и lossy-режимы. Можно работать без принудительной потери качества или задавать ограничение через
--max. -
Удаление метаданных. Есть гибкие параметры для EXIF, IPTC, XMP, ICC, комментариев и других маркеров.
-
Пакетная обработка. Jpegoptim легко обрабатывает много файлов через маски,
find,xargs,--files-fromи--files-stdin. -
Подходит для серверов. Программа не требует графической оболочки и хорошо работает по SSH.
-
Удобна для автоматизации. Команды можно встраивать в shell-скрипты, cron, деплой и CI/CD.
-
Понятный вывод. В терминале видно исходный размер, новый размер и процент экономии.
-
Сохранение атрибутов. Есть
--preserveи--preserve-perms. -
Работа с progressive JPEG. Можно сохранять режим, принудительно менять его или выбирать автоматически.
Для владельца сайта Jpegoptim особенно полезен тем, что позволяет быстро уменьшить вес медиатеки без ручного открытия каждого изображения. Для разработчика — тем, что превращает оптимизацию JPEG в повторяемую команду. Для администратора — тем, что работает в серверной среде без GUI.
Недостатки и ограничения
Jpegoptim не универсален, и это нужно учитывать. Его ограничения связаны не с плохой реализацией, а с самой идеей программы: она делает одну задачу и не пытается заменить полноценный редактор изображений.
Основные ограничения:
-
Нет графического интерфейса. Новичкам может быть непривычно работать только через терминал.
-
Нет предпросмотра. Качество после
--maxили--sizeнужно проверять отдельно. -
Только JPEG/JFIF. PNG, WebP, AVIF, GIF и HEIC не обрабатываются.
-
Нет ресайза. Программа не меняет ширину и высоту изображения.
-
Нет визуальной коррекции. Нельзя изменить яркость, контраст, резкость или баланс белого.
-
По умолчанию изменяет исходные файлы. Без
--destи копий можно перезаписать оригиналы. -
Удаление метаданных необратимо. После
--strip-allвернуть EXIF из обработанного файла нельзя. -
Агрессивные параметры портят качество. Низкие значения
--maxи жёсткий--sizeмогут дать артефакты. -
Нужно понимать командную строку. Для массовой обработки особенно важна аккуратность с путями и масками.
Если нужен визуальный инструмент с предпросмотром, лучше выбрать ImageOptim, Squoosh, XnConvert, RIOT или графический редактор. Если нужно изменить размер изображения, подойдёт ImageMagick, GraphicsMagick, XnConvert, FastStone Photo Resizer или аналогичная программа. Jpegoptim лучше использовать именно для финальной JPEG-оптимизации.
Типичные ошибки при работе с Jpegoptim
Самая частая ошибка — запуск команды по оригиналам без резервной копии. Jpegoptim по умолчанию может перезаписывать файлы, и это нужно помнить всегда.
Небезопасный первый запуск:
jpegoptim --max=70 --strip-all *.jpg
Если в папке находятся оригинальные фотографии, такая команда сразу пересожмёт их и удалит метаданные. Правильнее сначала сделать копию или использовать --dest:
mkdir -p optimizedjpegoptim --dest=optimized --max=85 --strip-all *.jpg
Вторая ошибка — слишком низкое качество. Значение --max=60 может выглядеть приемлемо на маленькой миниатюре, но на большом экране артефакты будут заметны. Для сайта лучше начинать с 85 или 90, а снижать только после проверки.
Третья ошибка — ожидание, что Jpegoptim уменьшит разрешение. Если файл весит 8 МБ из-за размера 6000×4000 пикселей, сначала нужен ресайз, затем оптимизация.
Четвёртая ошибка — удаление ICC-профиля без проверки цвета. Для обычных веб-изображений это часто проходит незаметно, но для фотографий, дизайна, иллюстраций и товарных снимков цвет может быть важен.
Пятая ошибка — неправильная работа с путями. Например, пользователь указывает --dest=optimized, но папки optimized нет. Перед запуском лучше создать её явно:
mkdir -p optimized
Шестая ошибка — применение одной команды ко всем изображениям без разделения по типам. Фотографии, скриншоты интерфейсов, баннеры с текстом и товарные изображения могут требовать разных параметров качества.
Для кого подходит Jpegoptim
Jpegoptim подходит пользователям, которым нужно быстро и технически грамотно оптимизировать JPEG. Это не программа для художественной обработки, а инструмент для прикладной работы с файлами.
Лучше всего Jpegoptim подходит:
-
веб-разработчикам;
-
администраторам сайтов;
-
SEO-специалистам;
-
владельцам интернет-магазинов;
-
контент-менеджерам с доступом к серверу;
-
пользователям Linux и macOS;
-
разработчикам статических сайтов;
-
тем, кто обрабатывает изображения пакетно;
-
тем, кто автоматизирует подготовку ассетов;
-
тем, кто работает с медиатеками CMS.
Программа менее удобна для пользователей, которым нужно открыть одну фотографию, подвигать ползунок качества и сразу увидеть визуальное сравнение. Для такого сценария лучше использовать Squoosh, ImageOptim, XnConvert, GIMP или другой инструмент с графическим интерфейсом.
Сравнение с аналогами
| Программа | Форматы | Интерфейс | Сильная сторона | Отличие от Jpegoptim |
|---|---|---|---|---|
| Jpegoptim | JPEG/JFIF | CLI | оптимизация JPEG, метаданные, автоматизация | узкая и быстрая утилита именно для JPEG |
| jpegtran | JPEG | CLI | lossless-трансформации JPEG | ближе к низкоуровневым операциям, меньше ориентирован на удобное ограничение качества |
| MozJPEG | JPEG | CLI/библиотеки | эффективное JPEG-кодирование | сильный энкодер, но менее прост как повседневный оптимизатор одной командой |
| ImageMagick | JPEG, PNG, WebP, TIFF и др. | CLI | конвертация, ресайз, обработка | намного шире, но не так узко сфокусирован на JPEG-оптимизации |
| GraphicsMagick | много форматов | CLI | быстрая пакетная обработка изображений | удобен для преобразований, но Jpegoptim проще для финальной JPEG-оптимизации |
| ImageOptim | JPEG, PNG, GIF, SVG и др. | GUI | удобная ручная оптимизация на macOS | проще для пользователя, но хуже для серверной автоматизации |
| FileOptimizer | много форматов | GUI | универсальная оптимизация разных файлов | шире по форматам, тяжелее и менее удобен для Unix-скриптов |
| Squoosh | JPEG, WebP, AVIF, PNG и др. | веб-интерфейс | визуальное сравнение качества | удобен для ручной настройки, но не заменяет CLI-пакетную обработку |
| XnConvert | много форматов | GUI | пакетный ресайз и конвертация | удобен для визуальных пакетных задач, но не так лёгок для серверов |
| cwebp | WebP | CLI | конвертация в WebP | работает с другим форматом, дополняет Jpegoptim, а не заменяет его |
Jpegoptim выигрывает у многих аналогов в простоте. Если задача звучит как оптимизировать JPEG-файлы в папке, программа решает её очень прямолинейно. Не нужно создавать проект, настраивать экспорт, выбирать пресет или открывать GUI. Достаточно команды:
jpegoptim --max=85 --strip-all *.jpg
jpegtran полезен для lossless-операций вроде оптимизации и некоторых трансформаций без пересжатия, но Jpegoptim удобнее в сценариях, где нужно быстро задать максимальное качество и удалить метаданные.
MozJPEG интересен, когда важна эффективность кодирования и требуется получить лучший lossy-результат при ручной настройке. Но Jpegoptim проще для массовой обработки уже существующих JPG-файлов.
ImageMagick и GraphicsMagick гораздо шире: они меняют размер, формат, цветовое пространство, создают миниатюры, добавляют водяные знаки, конвертируют файлы. Но именно из-за универсальности команды у них сложнее. Jpegoptim в этом смысле чище: он оптимизирует JPEG и не отвлекает на лишние функции.
ImageOptim и Squoosh удобнее для пользователей, которым нужен визуальный контроль. В Squoosh можно смотреть сравнение качества, выбирать кодек и видеть результат до сохранения. Jpegoptim этого не делает, зато его легко запускать на сервере и в скриптах.
Реальные сценарии использования Jpegoptim
Первый сценарий — оптимизация старой папки загрузок на сайте. В медиатеке накопились тысячи JPG-файлов, и часть из них весит слишком много. Jpegoptim позволяет пройти по каталогу и уменьшить изображения без ручного скачивания.
find ./uploads -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -exec jpegoptim --max=85 --strip-all --preserve {} \;
Второй сценарий — подготовка изображений перед публикацией статьи. Автор сохраняет картинки в папку, затем запускает:
jpegoptim --max=85 --strip-all *.jpg
После этого файлы становятся легче и быстрее загружаются на странице.
Третий сценарий — очистка EXIF перед публичной публикацией. Если фотографии содержат данные камеры или координаты, их можно удалить:
jpegoptim --strip-exif --strip-xmp --strip-com photo.jpg
Четвёртый сценарий — карточки товаров. Для интернет-магазина важны лёгкие изображения, но нельзя сильно портить детали товара. Подходит осторожный параметр:
jpegoptim --max=90 --strip-all product.jpg
Пятый сценарий — регулярная обработка новых файлов на сервере. Например, раз в ночь обрабатывать только изображения, изменённые за последние сутки:
find /var/www/site/uploads -type f -iname "*.jpg" -mtime -1 -exec jpegoptim --max=85 --strip-all --preserve {} \;
Шестой сценарий — локальная подготовка ассетов перед деплоем:
find ./public -type f -iname "*.jpg" -print0 | xargs -0 jpegoptim --max=85 --strip-all
Седьмой сценарий — подготовка изображений к загрузке в сервис с ограничением размера:
jpegoptim --size=300k photo.jpg
Безопасный набор команд для новичка
Для первого знакомства с Jpegoptim лучше не начинать с агрессивных параметров. Безопасная последовательность выглядит так.
Проверить справку:
jpegoptim --help
Сделать копию файла:
cp photo.jpg photo-test.jpg
Посмотреть потенциальный результат без записи:
jpegoptim --noaction --max=85 photo-test.jpg
Оптимизировать копию:
jpegoptim --max=85 photo-test.jpg
Сохранить результат в отдельную папку:
mkdir -p optimizedjpegoptim --dest=optimized --max=85 --strip-all photo.jpg
Обработать все JPG в текущей папке с сохранением времени изменения:
jpegoptim --max=85 --strip-all --preserve *.jpg
Рекурсивно обработать каталог после проверки:
find ./images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -exec jpegoptim --max=85 --strip-all --preserve {} \;
Такой набор команд закрывает основные задачи: тестирование, безопасное сохранение копий, сжатие по качеству, удаление метаданных и пакетная обработка.
Итоговая оценка Jpegoptim
Jpegoptim — сильная программа для тех, кто понимает задачу JPEG-оптимизации и хочет решать её быстро, повторяемо и без графической оболочки. Она не предназначена для художественной обработки, не заменяет фоторедактор и не подходит для визуального подбора качества с предпросмотром. Зато она отлично работает там, где нужны командная строка, автоматизация и пакетная обработка.
Главные достоинства Jpegoptim — простота, предсказуемость, гибкое управление метаданными, поддержка lossless и lossy-сценариев, удобная обработка папок и хорошая пригодность для серверов. Команда вроде:
jpegoptim --max=85 --strip-all --preserve *.jpg
решает типовую задачу веб-оптимизации быстрее, чем ручное открытие каждого файла в графической программе.
Лучше всего Jpegoptim проявляет себя в рабочих процессах сайтов: подготовка изображений для публикации, очистка EXIF, уменьшение веса медиатеки, обработка карточек товаров, автоматизация через скрипты и регулярные задачи. Если нужно изменить разрешение, конвертировать формат или визуально сравнить качество, стоит использовать дополнительные инструменты. Но для финального уменьшения веса JPEG-файлов Jpegoptim остаётся одним из самых удобных и прямолинейных решений.