Jpegoptim: программа для оптимизации JPEG

Jpegoptim — специализированная программа для оптимизации JPEG/JFIF-изображений через командную строку. Она не пытается быть универсальным фоторедактором, не открывает фотографии в окне предпросмотра, не предлагает кисти, фильтры, кадрирование или цветокоррекцию. Её задача гораздо уже и конкретнее: уменьшить размер JPEG-файла, сохранить или удалить метаданные, применить lossless-оптимизацию либо пересжать изображение с заданным пределом качества.

Скачать Jpegoptim

БесплатноОптимизацияWindows

Для сжатия и оптимизации файлов

⬇ Скачать ФотоМАСТЕР бесплатно
⬇ Скачать 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-данных, пакетная обработка и подготовка изображений для сайта.

Содержание

Краткая характеристика 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

Установка Jpegoptim через apt в терминале

На Fedora команда обычно выглядит так:

sudo dnf install jpegoptim

На системах, где используется yum, установка может выполняться так:

sudo yum install jpegoptim

На macOS удобно использовать Homebrew:

brew install jpegoptim

После установки стоит проверить, что команда доступна в терминале:

jpegoptim --version

или открыть краткую справку:

jpegoptim --help

Справка показывает синтаксис запуска, основные параметры обработки, опции перезаписи, управление качеством, удаление метаданных и режимы вывода.

Справка Jpegoptim с параметрами командной строки

Если команда 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

Такой формат вывода удобен тем, что не требует отдельного отчёта. После запуска сразу видно, какие изображения действительно уменьшились, а какие были пропущены.

Базовая оптимизация 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

Пакетная обработка нескольких JPEG-файлов в Jpegoptim

В выводе видно, какие файлы уменьшились, какие были пропущены и какой процент экономии получился. Такой режим удобен для папок с изображениями статей, карточками товаров, миниатюрами, баннерами и фотографиями.

Для рекурсивной обработки вложенных папок используется 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 остаётся одним из самых удобных и прямолинейных решений.


Ваш адрес email не будет опубликован. Обязательные поля помечены *