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

Главная особенность Jpegoptim — работа из командной строки. У программы нет классического окна с кнопками Открыть, Сохранить, Экспорт или Сжать. Ее интерфейс — это команда jpegoptim, параметры запуска и текстовый вывод в терминале. Такой подход особенно удобен для Linux-серверов, статических сайтов, CI/CD-пайплайнов, автоматической обработки медиапапок и любых сценариев, где нужно сжимать не одну картинку вручную, а десятки, сотни или тысячи JPEG-файлов по одинаковым правилам.

Скачать Jpegoptim

Оценка 9.7 Рекомендуем
  • Ретушь фото
  • Русский интерфейс
  • Просто для новичков
Скачать бесплатно на Windows
Лучшая альтернатива
Jpegoptim
Оценка 8.5
  • Только командная строка
  • Не для ретуши фото
  • Только JPEG-сжатие
Скачать Jpegoptim
Загрузка начнётся после нажатия

Jpegoptim поддерживает два принципиально разных режима работы: оптимизацию JPEG без потерь за счет оптимизации таблиц Хаффмана и сжатие с потерями через ограничение максимального качества. В первом случае пиксельные данные изображения не перекодируются с понижением качества, во втором программа может уменьшить файл сильнее, но изображение уже пересохраняется с заданным лимитом качества.

Программа особенно хорошо подходит для задач, где нужно быстро уменьшить размер JPG без лишней ручной работы:

  • подготовка изображений для сайта;

  • оптимизация карточек товаров;

  • уменьшение веса фотографий перед публикацией;

  • очистка EXIF, XMP, IPTC и ICC-данных;

  • пакетное сжатие папки с JPEG;

  • обработка изображений на сервере после загрузки;

  • автоматизация через Bash, cron, Makefile, GitHub Actions или другой пайплайн;

  • подготовка медиатеки перед переносом на хостинг.

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

Назначение и логика работы Jpegoptim

Jpegoptim нужен там, где JPEG-файл уже существует, но занимает больше места, чем должен. Обычно это фотографии с камеры, изображения после экспорта из графического редактора, картинки из CMS, изображения товаров, баннеры, иллюстрации для статей и любые .jpg / .jpeg, которые нужно сделать легче.

В базовом режиме программа берет JPEG-файл, анализирует его структуру и пытается пересобрать данные так, чтобы итоговый файл стал меньше. Если уменьшение возможно, файл заменяется оптимизированной версией. Если файл уже хорошо сжат и дополнительной экономии нет, Jpegoptim не делает бессмысленную замену.

Типовой пример выглядит так:

jpegoptim photo.jpg

Эта команда запускает оптимизацию одного файла. Если рядом лежит несколько JPEG-изображений, можно обработать их сразу:

jpegoptim *.jpg

Для обычного пользователя это выглядит очень просто: в папке с фотографиями запускается одна команда, после чего Jpegoptim сообщает, сколько байт было до обработки, сколько стало после нее и какой процент удалось сэкономить.

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

Интерфейс программы

Jpegoptim — CLI-программа. Поэтому ее интерфейс состоит из команд, аргументов, параметров и вывода в терминале. Это важно понимать сразу: здесь нет визуального предпросмотра, ползунка качества, кнопки Apply или окна сравнения до/после. Управление строится вокруг точных флагов.

Основные элементы интерфейса:

Элемент Что делает
jpegoptim основная команда запуска
jpegoptim --help выводит справку по параметрам
jpegoptim --version показывает версию программы
jpegoptim file.jpg оптимизирует один JPEG
jpegoptim *.jpg обрабатывает несколько JPEG в текущей папке
--max=85 задает максимальное качество для lossy-сжатия
--size=250k пытается получить файл заданного размера
--strip-all удаляет метаданные и маркеры из выходного файла
--dest=folder сохраняет результат в отдельный каталог
--noaction показывает результат без реального изменения файла
--totals выводит итоговую статистику по группе файлов
--verbose включает подробный вывод
--quiet уменьшает количество сообщений
--csv выводит прогресс в CSV-формате
--workers=4 запускает параллельную обработку

 

Окно терминала со справкой Jpegoptim и основными параметрами запуска

Справка jpegoptim --help — главный экран управления программой. В ней видны ключевые параметры: --dest, --force, --help, --max, --noaction, --overwrite, --preserve, --quiet, --totals, --verbose, --version, --strip-all, --strip-com, --strip-exif, --strip-iptc, --strip-icc. Набор параметров показывает характер программы: она рассчитана не на ручную визуальную обработку, а на точную командную оптимизацию JPEG.

Что умеет Jpegoptim

Jpegoptim выполняет несколько групп задач.

Первая группа — сжатие JPEG без потерь. Это стандартный режим, в котором программа оптимизирует кодирование JPEG-данных, не снижая визуальное качество изображения. Такой режим удобен, когда нельзя рисковать качеством фотографий: например, для архивных изображений, портфолио, каталога недвижимости, карточек товаров или иллюстраций, где важна детализация.

Вторая группа — сжатие с потерями. Оно включается через --max или --size. В этом режиме Jpegoptim может уменьшить файл значительно сильнее, потому что пересохраняет изображение с заданным ограничением качества или пытается уложиться в конкретный размер. Параметр --max принимает значения качества от 0 до 100.

Третья группа — работа с метаданными. Jpegoptim может удалять EXIF, IPTC, ICC, XMP, комментарии и другие JPEG-маркеры. Это полезно для веб-публикаций, где лишние данные увеличивают вес файла и могут раскрывать ненужную информацию: дату съемки, модель камеры, параметры объектива, комментарии редактора, GPS-координаты или встроенные цветовые профили.

Четвертая группа — пакетная обработка. Программа принимает список файлов, маски вроде *.jpg, имена файлов из stdin и имена файлов из отдельного текстового списка. Это делает Jpegoptim удобным инструментом для массовой оптимизации изображений.

Пятая группа — автоматизация. Jpegoptim умеет работать со стандартным вводом и стандартным выводом, выводить данные в CSV, печатать итоговую статистику и запускать несколько рабочих процессов через --workers. Параметр --workers=<max> задает максимальное число параллельных процессов, а значение по умолчанию равно 1.

Сжатие без потерь

Базовый режим Jpegoptim — lossless-оптимизация. Он включен по умолчанию и основан на оптимизации таблиц Хаффмана. Такой режим не делает фотографию мыльной, не добавляет JPEG-артефакты и не меняет разрешение. Программа просто пересобирает JPEG-файл более компактным способом.

Команда для одного файла:

jpegoptim photo.jpg

Команда для нескольких файлов в текущей папке:

jpegoptim photo1.jpg photo2.jpg photo3.jpg

Команда для всех .jpg в папке:

jpegoptim *.jpg

Команда для всех .jpeg:

jpegoptim *.jpeg

Практический смысл такого режима простой: можно прогнать через Jpegoptim папку с изображениями и получить экономию без визуального ухудшения. Экономия зависит от исходного файла. Если картинка уже была хорошо оптимизирована, выигрыш может быть минимальным. Если изображение экспортировано из редактора с лишними данными и неоптимальными таблицами, уменьшение может быть заметным.

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

Пример:

jpegoptim image.jpg

Возможный вывод:

image.jpg 1920x1080 24bit N JFIF [OK] 485231 --> 421804 bytes (13.07%), optimized.

Здесь:

  • image.jpg — имя файла;

  • 1920x1080 — разрешение изображения;

  • 24bit — глубина цвета;

  • N — обычный, non-progressive JPEG;

  • JFIF — маркер формата;

  • [OK] — файл успешно прочитан;

  • 485231 --> 421804 bytes — размер до и после;

  • 13.07% — процент экономии;

  • optimized — файл был заменен оптимизированной версией.

Если экономии нет, программа может показать статус skipped. Это нормальное поведение: Jpegoptim не обязан портить или перезаписывать файл, если более компактный результат не получается.

Сжатие с потерями через --max

Параметр --max задает максимальный фактор качества JPEG. Он включает lossy-оптимизацию и используется, когда нужно получить более сильное уменьшение размера, чем дает lossless-режим. Короткая форма параметра — -m, длинная — --max.

Пример:

jpegoptim --max=85 photo.jpg

То же самое в короткой форме:

jpegoptim -m85 photo.jpg

Значение 85 означает, что Jpegoptim не будет сохранять изображение с качеством выше 85. Если исходный файл сохранен с более высоким качеством, программа перекодирует его. Если исходное качество уже ниже заданного порога, файл будет обработан более щадящим способом. Диапазон значений качества — от 0 до 100.

На практике чаще всего используют такие ориентиры:

Значение --max Когда подходит Оценка результата
--max=95 фотографии, где важно сохранить максимум деталей слабое сжатие, высокое качество
--max=90 качественные изображения для сайта хороший баланс
--max=85 статьи, карточки товаров, блоги, лендинги универсальный веб-вариант
--max=80 большие галереи, превью, изображения без мелкого текста заметная экономия
--max=75 второстепенные иллюстрации, фоновые картинки возможны артефакты
--max=60 и ниже жесткие ограничения по весу качество нужно проверять вручную

Для веб-публикаций часто разумно начинать с --max=85. Это не магическое значение, но хороший практический компромисс между размером файла и визуальным качеством. Для фотографий с большим количеством мелких деталей лучше использовать 90 или 95. Для простых изображений, скриншотов интерфейсов и фоновых иллюстраций можно пробовать 80.

Команда для папки:

jpegoptim --max=85 *.jpg

Команда с подробной статистикой:

jpegoptim --max=85 --totals *.jpg

Команда с предварительной проверкой без изменения файлов:

jpegoptim --max=85 --noaction *.jpg

--noaction особенно полезен перед массовой обработкой. Он показывает, что программа сделала бы с файлами, но не меняет их. Это безопасный способ оценить будущую экономию и понять, не слишком ли агрессивно выбран параметр качества.

Оптимизация до заданного размера через --size

Параметр --size используется, когда нужно приблизить JPEG к конкретному размеру. Это полезно для сайтов, форм загрузки, CMS, маркетплейсов, почтовых вложений и сервисов, где есть ограничение: например, не больше 500 КБ.

Короткая форма — -S, длинная — --size.

Пример для ограничения в 500 КБ:

jpegoptim --size=500k photo.jpg

Пример для ограничения в 250 КБ:

jpegoptim --size=250k photo.jpg

Можно указывать и процент от исходного размера:

jpegoptim --size=70% photo.jpg

Параметр --size отключает lossless-режим и пытается подобрать такое сжатие, чтобы итоговый файл приблизился к заданному размеру. Размер задается в килобайтах или в процентах от исходного файла.

Важно учитывать практическое ограничение: результат не всегда получается ровно заданного размера. JPEG-сжатие зависит от содержимого изображения, количества деталей, шума, резких границ, цветовых переходов и исходного качества. Поэтому команда --size=250k означает попытаться получить около 250 КБ, а не математическую гарантию точного байта. Для более близкого результата иногда помогает повторный запуск на том же файле.

Пример безопасной проверки:

jpegoptim --size=500k --noaction photo.jpg

Пример обработки нескольких файлов:

jpegoptim --size=500k *.jpg

Для веб-графики --size удобен, когда важен не абстрактный уровень качества, а конкретный лимит веса. Например, если CMS не принимает изображения больше 1 МБ, можно использовать:

jpegoptim --size=1000k upload.jpg

Для слишком больших фотографий лучше сначала уменьшить разрешение в другой программе, а потом оптимизировать JPEG через Jpegoptim. Сжатие до маленького размера при огромном разрешении может дать плохое качество: программа будет вынуждена сильно ухудшать JPEG, чтобы уложиться в лимит.

Работа с метаданными

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

К таким данным относятся:

  • EXIF — параметры съемки, дата, камера, объектив, иногда GPS;

  • IPTC — редакционные и авторские данные;

  • ICC — цветовой профиль;

  • XMP — расширенные метаданные;

  • COM — текстовые комментарии JPEG;

  • JFIF и JFXX — служебные маркеры;

  • Adobe APP14 — маркер, связанный с особенностями цветового пространства.

По умолчанию Jpegoptim сохраняет распространенные метаданные EXIF, IPTC, ICC, XMP и COM, а неизвестные маркеры отбрасывает. JFIF при обработке генерируется библиотекой JPEG заново, а Adobe-маркер зависит от цветового пространства и поведения JPEG-библиотеки.

Самая жесткая команда для очистки:

jpegoptim --strip-all photo.jpg

Короткая форма:

jpegoptim -s photo.jpg

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

Справка Jpegoptim в терминале с параметрами --size, --csv, --strip-all и другими опциями

Можно удалять не все сразу, а отдельные типы данных:

jpegoptim --strip-exif photo.jpg
jpegoptim --strip-icc photo.jpg
jpegoptim --strip-xmp photo.jpg
jpegoptim --strip-com photo.jpg
jpegoptim --strip-iptc photo.jpg
jpegoptim --strip-jfif photo.jpg
jpegoptim --strip-jfxx photo.jpg
jpegoptim --strip-adobe photo.jpg

Для веба часто используют связку:

jpegoptim --max=85 --strip-all photo.jpg

Она одновременно уменьшает качество до разумного уровня и удаляет метаданные.

Иногда удалять все подряд нельзя. Например, ICC-профиль может быть важен для точной передачи цвета, особенно если изображение подготовлено в нестандартном цветовом пространстве. В таком случае можно удалить лишнее, но сохранить ICC:

jpegoptim --strip-all --keep-icc photo.jpg

Если важно сохранить EXIF:

jpegoptim --strip-all --keep-exif photo.jpg

Если нужно сохранить EXIF и ICC:

jpegoptim --strip-all --keep-exif --keep-icc photo.jpg

Для полного сохранения маркеров используется:

jpegoptim --strip-none photo.jpg

или:

jpegoptim --keep-all photo.jpg

При использовании --strip-none остальные параметры --strip-* и --keep-* игнорируются.

Сохранение файлов в отдельную папку

По умолчанию Jpegoptim изменяет входные файлы, если они были оптимизированы. Это удобно для автоматизации, но рискованно при первой обработке, особенно если используется --max, --size или --strip-all. Для безопасной работы лучше сохранять оптимизированные копии в отдельный каталог.

Параметр:

--dest=<path>

Короткая форма:

-d<path>

Пример:

mkdir optimizedjpegoptim --dest=optimized photo.jpg

Для папки:

mkdir optimizedjpegoptim --dest=optimized *.jpg

При использовании --dest Jpegoptim сохраняет оптимизированные файлы в указанный каталог. Если исходный файл не удалось уменьшить, копия в папке назначения не создается. Такое поведение важно учитывать: отсутствие файла в optimized не всегда означает ошибку, иногда это значит, что файл не стал меньше.

Для lossy-сжатия с сохранением копий:

mkdir optimizedjpegoptim --max=85 --dest=optimized *.jpg

Для веб-публикации с очисткой метаданных:

mkdir optimizedjpegoptim --max=85 --strip-all --dest=optimized *.jpg

Если в папке назначения уже есть файл с таким именем, помогает --overwrite:

jpegoptim --max=85 --strip-all --dest=optimized --overwrite *.jpg

--overwrite перезаписывает целевой файл при работе с --dest. Без него программа защищает уже существующие файлы в папке назначения.

Пакетная обработка JPEG

Jpegoptim удобен именно в пакетной обработке. Если нужно сжать один файл, можно использовать почти любой инструмент. Но когда нужно обработать большой каталог, командная строка начинает выигрывать у графического интерфейса.

Обработка всех JPG в текущей папке:

jpegoptim *.jpg

Обработка .jpg и .jpeg:

jpegoptim *.jpg *.jpeg

Сжатие всех файлов с максимальным качеством 85:

jpegoptim --max=85 *.jpg

Очистка метаданных у всех JPEG:

jpegoptim --strip-all *.jpg

Сжатие и очистка одновременно:

jpegoptim --max=85 --strip-all *.jpg

Вывод итоговой статистики:

jpegoptim --max=85 --strip-all --totals *.jpg

Если изображения лежат во вложенных папках, Jpegoptim удобно использовать вместе с find:

find ./images -type f -iname "*.jpg" -exec jpegoptim {} \;

Для .jpg и .jpeg:

find ./images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -exec jpegoptim {} \;

Для имен с пробелами надежнее использовать -print0 и xargs -0:

find ./images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -0 jpegoptim

Для сжатия с потерями:

find ./images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -0 jpegoptim --max=85 --strip-all

Такой сценарий хорошо подходит для папки сайта:

site/  images/    header.jpg    products/      item-1.jpg      item-2.jpg    blog/      article-cover.jpg

Команда:

find ./site/images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -0 jpegoptim --max=85 --strip-all --totals

После выполнения все JPEG в медиапапке будут обработаны одинаково. Это лучше ручной оптимизации по одному файлу: меньше ошибок, одинаковые параметры, понятная статистика.

Работа со списком файлов

Jpegoptim умеет читать имена файлов не только из аргументов командной строки, но и из стандартного ввода или из отдельного файла.

Чтение списка из stdin:

find ./images -type f -iname "*.jpg" | jpegoptim --files-stdin

Чтение списка из файла:

jpegoptim --files-from=list.txt

Файл list.txt должен содержать имена файлов по одному на строку:

images/photo-1.jpgimages/photo-2.jpgimages/photo-3.jpg

Параметр --files-stdin читает имена файлов из стандартного ввода, по одному имени на строку. Параметр --files-from=<filename> читает имена файлов из указанного файла, также по одному имени на строку.

Такой режим полезен, когда список изображений формируется заранее:

  • CMS выгрузила список новых файлов;

  • скрипт нашел только измененные JPEG;

  • нужно обработать изображения из конкретного отчета;

  • требуется сжать не всю папку, а выбранные файлы;

  • список формируется через git diff, find, fd, ripgrep или другой инструмент.

Пример обработки только файлов, измененных в Git:

git diff --name-only -- '*.jpg' '*.jpeg' | jpegoptim --files-stdin

Пример с lossy-сжатием:

git diff --name-only -- '*.jpg' '*.jpeg' | jpegoptim --files-stdin --max=85 --strip-all

Работа через stdin и stdout

Jpegoptim можно использовать в цепочках обработки, где входной JPEG приходит через стандартный ввод, а результат отправляется в стандартный вывод.

Чтение из stdin:

cat input.jpg | jpegoptim --stdin > output.jpg

Вывод в stdout:

jpegoptim --stdout input.jpg > output.jpg

При использовании --stdin программа читает одно изображение из стандартного ввода и отправляет результат в стандартный вывод. --stdout в этом случае подразумевается автоматически. Остальные имена файлов из командной строки игнорируются.

Такой режим нужен не всем, но он важен для автоматизации:

cat source.jpg | jpegoptim --stdin --max=85 --strip-all > result.jpg

Или:

jpegoptim --stdout --max=85 --strip-all source.jpg > result.jpg

Использование stdout удобно, когда файл не нужно перезаписывать на месте, а результат должен попасть в другой процесс, временный файл, HTTP-ответ или систему сборки.

Параллельная обработка через --workers

Для больших папок с изображениями Jpegoptim поддерживает параллельную обработку. Параметр --workers=<max> задает максимальное количество рабочих процессов. По умолчанию используется один процесс.

Пример:

jpegoptim --workers=4 *.jpg

С lossy-сжатием и очисткой метаданных:

jpegoptim --workers=4 --max=85 --strip-all *.jpg

С итоговой статистикой:

jpegoptim --workers=4 --max=85 --strip-all --totals *.jpg

Для сервера с несколькими ядрами --workers заметно ускоряет обработку больших наборов JPEG. Но ставить значение слишком высоким не всегда разумно. Если параллельно обрабатываются большие фотографии, нагрузка на CPU и диск может стать чрезмерной.

Практические ориентиры:

Ситуация Значение
обычный ноутбук --workers=2 или --workers=4
рабочая станция --workers=4 или --workers=8
сервер с большим числом ядер подбирать по нагрузке
HDD-диск лучше меньше процессов
SSD/NVMe можно больше процессов
cron-задача ночью можно агрессивнее
живой production-сервер осторожнее, чтобы не мешать сайту

Для безопасного старта:

jpegoptim --workers=2 --max=85 --strip-all --totals *.jpg

Progressive JPEG и обычный JPEG

JPEG может быть обычным последовательным или прогрессивным. Обычный JPEG загружается сверху вниз. Progressive JPEG при загрузке сначала показывает грубую версию изображения, а затем постепенно уточняет детали. Для веба progressive JPEG часто воспринимается лучше, особенно на медленном соединении.

Jpegoptim умеет управлять этим режимом:

jpegoptim --all-progressive *.jpg

Эта команда принудительно делает выходные JPEG прогрессивными.

jpegoptim --all-normal *.jpg

Эта команда принудительно делает выходные JPEG обычными, то есть non-progressive.

jpegoptim --auto-mode *.jpg

--auto-mode выбирает progressive или non-progressive вариант в зависимости от того, какой дает меньший файл. По умолчанию Jpegoptim сохраняет исходный режим progressive / non-progressive.

Для веб-публикации часто используют:

jpegoptim --max=85 --strip-all --all-progressive *.jpg

Более нейтральный вариант:

jpegoptim --max=85 --strip-all --auto-mode *.jpg

--auto-mode хорош тем, что не навязывает один режим всем изображениям. Если progressive дает меньший файл, программа выбирает его. Если обычный JPEG компактнее, сохраняется обычный вариант.

Проверочный режим --noaction

Перед массовой обработкой важно понять, что произойдет с файлами. Для этого есть --noaction.

Команда:

jpegoptim --noaction photo.jpg

С lossy-сжатием:

jpegoptim --max=85 --noaction photo.jpg

Для папки:

jpegoptim --max=85 --strip-all --noaction *.jpg

--noaction не оптимизирует файлы, а только печатает результаты, которые программа получила бы при обработке.

Этот режим стоит использовать:

  • перед первым запуском на рабочей папке;

  • перед применением --max;

  • перед применением --size;

  • перед удалением метаданных через --strip-all;

  • перед обработкой большого каталога;

  • перед запуском команды в скрипте.

Пример аккуратной проверки:

jpegoptim --max=85 --strip-all --noaction --totals *.jpg

Если результат выглядит нормально, можно убрать --noaction:

jpegoptim --max=85 --strip-all --totals *.jpg

Подробный, тихий и CSV-вывод

Jpegoptim можно настроить под разные сценарии вывода.

Подробный режим:

jpegoptim --verbose photo.jpg

Короткая форма:

jpegoptim -v photo.jpg

Тихий режим:

jpegoptim --quiet photo.jpg

Короткая форма:

jpegoptim -q photo.jpg

CSV-вывод:

jpegoptim --csv *.jpg

Короткая форма:

jpegoptim -b *.jpg

Итоговая статистика:

jpegoptim --totals *.jpg

Короткая форма:

jpegoptim -t *.jpg

--csv полезен для скриптов, отчетов и автоматической обработки результатов. Вместо обычного человекочитаемого вывода можно получить структурированные данные, которые проще анализировать.

Пример:

jpegoptim --csv --totals *.jpg

--quiet подходит для cron-задач и автоматических пайплайнов, где не нужен подробный лог. --verbose, наоборот, полезен при диагностике и настройке параметров.

Сохранение времени изменения и прав доступа

Для некоторых рабочих процессов важно, чтобы после оптимизации файл сохранил старую дату изменения. Например, сайт или система сборки может использовать время изменения файла для кеширования.

Для этого используется:

jpegoptim --preserve photo.jpg

Короткая форма:

jpegoptim -p photo.jpg

--preserve сохраняет время изменения файла.

Также есть параметр:

jpegoptim --preserve-perms photo.jpg

Короткая форма:

jpegoptim -P photo.jpg

Он связан с сохранением прав доступа, владельца и группы. При таком режиме Jpegoptim перезаписывает оригинальный файл иначе, делает временную резервную копию с расширением .jpegoptim.bak и удаляет ее после успешной замены.

Обычному пользователю чаще нужен --preserve, а --preserve-perms важнее для серверов, shared-хостинга, пользовательских загрузок, скриптов от имени разных пользователей и систем, где права доступа нельзя случайно изменить.

Практическая инструкция: сжать одну фотографию без потери качества

Самый безопасный сценарий — lossless-оптимизация с сохранением копии в отдельную папку.

  1. Создать папку для результата:

mkdir optimized
  1. Запустить Jpegoptim:

jpegoptim --dest=optimized photo.jpg
  1. Проверить размер исходника и результата:

ls -lh photo.jpg optimized/photo.jpg

Если оптимизированная копия появилась, значит Jpegoptim смог уменьшить файл. Если файла в optimized нет, значит исходный JPEG не стал меньше, и программа не стала создавать бессмысленную копию.

Для одного файла это надежный вариант, потому что оригинал остается нетронутым.

Практическая инструкция: сжать одну фотографию с потерями

Если lossless-режима недостаточно, можно задать максимальное качество.

  1. Создать папку:

mkdir optimized
  1. Запустить сжатие:

jpegoptim --max=85 --dest=optimized photo.jpg
  1. Проверить размер:

ls -lh photo.jpg optimized/photo.jpg
  1. Открыть результат и визуально проверить качество.

Для более аккуратного качества:

jpegoptim --max=90 --dest=optimized photo.jpg

Для более сильного уменьшения:

jpegoptim --max=80 --dest=optimized photo.jpg

Для жесткого сжатия:

jpegoptim --max=70 --dest=optimized photo.jpg

Jpegoptim не показывает визуальное сравнение. Поэтому после lossy-сжатия нужно открыть результат в просмотрщике изображений и проверить мелкие детали, текст, лица, градиенты и контрастные границы.

Пример запуска Jpegoptim в терминале macOS для обработки JPEG-файла

На скриншоте показан характерный сценарий: пользователь находится в папке с изображениями и запускает jpegoptim IMG01.jpeg. Именно так обычно выглядит работа с программой — без отдельного окна приложения, через терминал и точные команды.

Практическая инструкция: подготовить изображения для сайта

Для сайта обычно важны три вещи:

Рабочая команда:

mkdir web-optimizedjpegoptim --max=85 --strip-all --all-progressive --dest=web-optimized *.jpg

Что делает эта команда:

Параметр Назначение
--max=85 ограничивает качество JPEG
--strip-all удаляет метаданные и лишние маркеры
--all-progressive делает выходные файлы прогрессивными
--dest=web-optimized сохраняет результат в отдельную папку
*.jpg обрабатывает все JPG в текущем каталоге 

Более осторожный вариант:

mkdir web-optimizedjpegoptim --max=90 --strip-all --auto-mode --dest=web-optimized *.jpg

Он сохраняет качество выше и позволяет Jpegoptim выбрать progressive или обычный JPEG автоматически.

Для папки с подпапками:

find ./images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -0 jpegoptim --max=85 --strip-all --all-progressive --totals

Если нельзя перезаписывать оригиналы во вложенных папках, лучше использовать отдельный скрипт с сохранением структуры каталогов. Сам --dest складывает результат в указанную папку и не решает автоматически задачу зеркального копирования сложного дерева каталогов.

Практическая инструкция: уменьшить JPEG до лимита загрузки

Допустим, сайт принимает файл не больше 300 КБ. Используется --size.

jpegoptim --size=300k photo.jpg

Безопаснее:

mkdir limitedjpegoptim --size=300k --dest=limited photo.jpg

Если нужен лимит 1 МБ:

jpegoptim --size=1000k photo.jpg

Если нужно уменьшить до 50% от исходного размера:

jpegoptim --size=50% photo.jpg

После такого сжатия обязательно проверяется качество. --size может быть жестче, чем --max, потому что программа пытается попасть в ограничение по весу. Если фотография детализированная, шумная или большая по разрешению, ради заданного размера качество может снизиться заметно.

Пример сравнения исходного и сжатого JPEG после обработки через Jpegoptim

На таком сравнении хорошо виден типичный смысл оптимизации: исходный JPEG весит заметно больше, а после сжатия размер файла уменьшается в несколько раз. Для реальной работы важно смотреть не только на килобайты, но и на визуальное качество результата.

Практическая инструкция: удалить EXIF перед публикацией

Если нужно убрать приватные данные из фотографии:

jpegoptim --strip-exif photo.jpg

Если нужно удалить максимум служебных данных:

jpegoptim --strip-all photo.jpg

Если нужно удалить все лишнее, но сохранить цветовой профиль:

jpegoptim --strip-all --keep-icc photo.jpg

Если нужно удалить все лишнее, но оставить EXIF:

jpegoptim --strip-all --keep-exif photo.jpg

Для папки:

jpegoptim --strip-all *.jpg

Для папки с сохранением копий:

mkdir cleanjpegoptim --strip-all --dest=clean *.jpg

Такой сценарий полезен перед публикацией личных фотографий, изображений сотрудников, фотографий объектов недвижимости, снимков с телефона и любых файлов, где в EXIF могут быть дата, устройство или координаты.

Использование Jpegoptim в Bash-скрипте

Для регулярной оптимизации изображений удобно сделать скрипт.

#!/usr/bin/env bashset -euo pipefailSRC="./images"DST="./optimized"mkdir -p "$DST"find "$SRC" -maxdepth 1 -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 |  xargs -0 jpegoptim \    --max=85 \    --strip-all \    --all-progressive \    --dest="$DST" \    --totals

Скрипт:

  • берет изображения из папки images;

  • создает папку optimized;

  • ищет .jpg и .jpeg;

  • сжимает с качеством до 85;

  • удаляет метаданные;

  • делает JPEG прогрессивными;

  • сохраняет результат отдельно;

  • выводит итоговую статистику.

Для обработки вложенных папок без сохранения структуры можно убрать -maxdepth 1:

find "$SRC" -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 |  xargs -0 jpegoptim --max=85 --strip-all --all-progressive --totals

Для более безопасного запуска сначала используется --noaction:

find "$SRC" -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 |  xargs -0 jpegoptim --max=85 --strip-all --noaction --totals

После проверки --noaction убирается.

Использование Jpegoptim на сервере

На сервере Jpegoptim полезен в задачах, где изображения появляются регулярно. Например, пользователь загружает фотографию, CMS сохраняет ее в папку, а скрипт оптимизирует JPEG перед публикацией.

Типовой серверный сценарий:

jpegoptim --max=85 --strip-all --all-progressive /var/www/site/uploads/photo.jpg

Для папки загрузок:

find /var/www/site/uploads -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -mtime -1 -print0 |  xargs -0 jpegoptim --max=85 --strip-all --all-progressive --totals

Эта команда обрабатывает JPEG, измененные за последние сутки. Ее можно использовать в cron-задаче.

Пример cron-логики:

0 3 * * * find /var/www/site/uploads -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -mtime -1 -print0 | xargs -0 jpegoptim --max=85 --strip-all --all-progressive --quiet

В production-среде лучше не начинать с агрессивных параметров. Сначала стоит использовать --noaction, затем обработать тестовую папку, потом включать задачу на реальных данных.

Использование в CI/CD и статических сайтах

Jpegoptim хорошо вписывается в сборку статического сайта. Например, репозиторий содержит папку assets/images, и перед публикацией нужно уменьшить JPEG.

Команда для CI:

find ./assets/images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 |  xargs -0 jpegoptim --max=85 --strip-all --all-progressive --totals

Вариант для проверки без изменения файлов:

find ./assets/images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 |  xargs -0 jpegoptim --max=85 --strip-all --noaction --totals

В CI полезен CSV-вывод:

find ./assets/images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 |  xargs -0 jpegoptim --csv --max=85 --strip-all

Так можно собирать статистику по сжатию и контролировать, какие файлы дают наибольшую экономию.

Безопасность работы с оригиналами

Главный риск Jpegoptim — не сложность программы, а слишком уверенный запуск на оригинальных файлах. По умолчанию Jpegoptim меняет входные файлы, если они были оптимизированы. Поэтому перед массовой обработкой нужны понятные правила.

Безопасный порядок:

  1. Сделать копию папки.

  2. Запустить --noaction.

  3. Проверить ожидаемую экономию.

  4. Для lossy-режима выбрать умеренный --max.

  5. Использовать --dest, если оригиналы важны.

  6. После обработки открыть несколько файлов вручную.

  7. Проверить изображения с текстом, лицами, мелкими деталями и градиентами.

Опасные команды для оригиналов:

jpegoptim --max=60 *.jpg
jpegoptim --size=100k *.jpg
jpegoptim --strip-all *.jpg

Они не плохие, но их нельзя запускать без понимания последствий. --max=60 может заметно ухудшить изображение. --size=100k может слишком сильно сжать большие фото. --strip-all может удалить данные, которые потом понадобятся: дату съемки, профиль цвета, авторские поля, комментарии.

Более осторожный вариант:

mkdir backup-optimizedjpegoptim --max=85 --strip-all --dest=backup-optimized *.jpg

Качество изображения после сжатия

Качество результата зависит не только от параметра --max, но и от самого изображения. JPEG плохо переносит некоторые типы контента:

  • мелкий текст;

  • тонкие линии;

  • интерфейсные скриншоты;

  • резкие контрастные границы;

  • шумные фотографии;

  • ночные снимки;

  • изображения с большим количеством мелких деталей;

  • плавные градиенты.

Фотография природы может хорошо выглядеть при --max=80, а скриншот интерфейса с мелким текстом уже будет выглядеть грязно. Поэтому универсального качества для всех картинок нет.

Практическая таблица:

Тип изображения Рекомендуемый старт
фотографии товаров --max=85 или --max=90
портреты --max=90
обложки статей --max=85
фоновые изображения --max=75 или --max=80
скриншоты интерфейса --max=90, лучше проверять вручную
изображения с текстом --max=90 или выше
архивные фотографии lossless без --max
картинки для email --max=80 или --size
лимитированные загрузки --size=... с ручной проверкой

Lossless-режим можно применять смелее. Lossy-режим всегда требует контроля.

Что Jpegoptim не умеет

Jpegoptim не нужно воспринимать как замену ImageMagick, Photoshop, GIMP, XnConvert или полноценного пакетного редактора изображений.

Программа не умеет:

  • менять ширину и высоту изображения;

  • кадрировать фотографию;

  • поворачивать изображение как редактор;

  • добавлять водяные знаки;

  • удалять фон;

  • улучшать резкость;

  • менять формат на WebP, PNG или AVIF;

  • показывать визуальное сравнение до/после;

  • работать как drag-and-drop GUI;

  • редактировать цвета;

  • автоматически оценивать субъективное качество глазами пользователя.

Если нужно изменить разрешение, сначала используется другой инструмент. После resize можно запустить Jpegoptim для финального уменьшения JPEG.

Например:

magick input.jpg -resize 1600x1600\> resized.jpgjpegoptim --max=85 --strip-all resized.jpg

Здесь Jpegoptim отвечает только за JPEG-оптимизацию после изменения размера.

Типичные ошибки и проблемы

Файл не уменьшился

Это нормальная ситуация. Значит, файл уже был хорошо оптимизирован или выбранный режим не дал меньшего результата.

Что проверить:

jpegoptim --verbose photo.jpg

Можно попробовать lossy-режим:

jpegoptim --max=85 photo.jpg

Или очистку метаданных:

jpegoptim --strip-all photo.jpg

Качество стало хуже

Значит, использовался lossy-режим: --max или --size. Чем ниже качество или жестче лимит размера, тем выше риск артефактов.

Более мягкий вариант:

jpegoptim --max=90 photo.jpg

Еще мягче:

jpegoptim --max=95 photo.jpg

Для полного исключения потерь не используйте --max и --size.

Исчезли EXIF-данные

Скорее всего, применялся --strip-all или --strip-exif.

Чтобы сохранить EXIF:

jpegoptim --strip-all --keep-exif photo.jpg

Чтобы не удалять маркеры:

jpegoptim --strip-none photo.jpg

Изменились цвета

Возможная причина — удаление ICC-профиля. Если профиль важен, сохраняйте его:

jpegoptim --strip-all --keep-icc photo.jpg

--size не попал точно в размер

Это ожидаемое ограничение. При использовании --size итоговый файл не всегда получается ровно заданного размера; повторный запуск может приблизить результат к целевому значению.

Пример:

jpegoptim --size=300k photo.jpgjpegoptim --size=300k photo.jpg

Файлы из подпапок не обработались

Маска *.jpg работает только в текущей папке. Для подпапок используйте find:

find ./images -type f -iname "*.jpg" -exec jpegoptim {} \;

Проблемы с пробелами в именах файлов

Используйте -print0 и xargs -0:

find ./images -type f -iname "*.jpg" -print0 | xargs -0 jpegoptim

Оригиналы перезаписались

Так работает стандартный режим. Для защиты оригиналов используйте --dest:

mkdir optimizedjpegoptim --dest=optimized *.jpg

В папке назначения нет некоторых файлов

Если файл не удалось уменьшить, Jpegoptim не создает его копию в папке назначения. Это нормальное поведение --dest.

Полезные команды Jpegoptim

Быстрая справка:

jpegoptim --help

Проверить версию:

jpegoptim --version

Оптимизировать один файл без потерь:

jpegoptim photo.jpg

Оптимизировать все JPG в папке:

jpegoptim *.jpg

Сжать с качеством до 85:

jpegoptim --max=85 photo.jpg

Сжать все JPG с качеством до 85:

jpegoptim --max=85 *.jpg

Попытаться получить файл до 300 КБ:

jpegoptim --size=300k photo.jpg

Уменьшить до 60% от исходного размера:

jpegoptim --size=60% photo.jpg

Удалить все лишние маркеры:

jpegoptim --strip-all photo.jpg

Удалить EXIF:

jpegoptim --strip-exif photo.jpg

Удалить XMP:

jpegoptim --strip-xmp photo.jpg

Удалить ICC:

jpegoptim --strip-icc photo.jpg

Удалить все, но сохранить ICC:

jpegoptim --strip-all --keep-icc photo.jpg

Удалить все, но сохранить EXIF:

jpegoptim --strip-all --keep-exif photo.jpg

Сохранить все маркеры:

jpegoptim --strip-none photo.jpg

Сохранить результат в отдельную папку:

mkdir optimizedjpegoptim --dest=optimized photo.jpg

Перезаписать файл в папке назначения:

jpegoptim --dest=optimized --overwrite photo.jpg

Проверить результат без изменения файла:

jpegoptim --noaction photo.jpg

Проверить lossy-сжатие без изменения:

jpegoptim --max=85 --noaction photo.jpg

Вывести итоги после обработки:

jpegoptim --totals *.jpg

Включить подробный вывод:

jpegoptim --verbose photo.jpg

Включить тихий режим:

jpegoptim --quiet photo.jpg

Вывести CSV:

jpegoptim --csv *.jpg

Сделать JPEG прогрессивным:

jpegoptim --all-progressive photo.jpg

Сделать JPEG обычным:

jpegoptim --all-normal photo.jpg

Автоматически выбрать progressive или обычный режим:

jpegoptim --auto-mode photo.jpg

Параллельная обработка:

jpegoptim --workers=4 *.jpg

Обработка списка из файла:

jpegoptim --files-from=list.txt

Обработка списка из stdin:

find ./images -type f -iname "*.jpg" | jpegoptim --files-stdin

Вывод результата в stdout:

jpegoptim --stdout photo.jpg > optimized.jpg

Чтение из stdin:

cat photo.jpg | jpegoptim --stdin > optimized.jpg

Сценарии использования

Оптимизация медиапапки сайта

find ./public/images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 |  xargs -0 jpegoptim --max=85 --strip-all --all-progressive --totals

Подходит для блогов, лендингов, документации, статических сайтов и каталогов.

Оптимизация новых файлов за сутки

find ./uploads -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -mtime -1 -print0 |  xargs -0 jpegoptim --max=85 --strip-all --quiet

Подходит для регулярной серверной обработки.

Безопасная оптимизация с копиями

mkdir optimizedjpegoptim --max=85 --strip-all --dest=optimized *.jpg

Подходит для ручной подготовки изображений перед публикацией.

Удаление приватных данных

jpegoptim --strip-all *.jpg

Подходит для фотографий перед загрузкой в интернет.

Сохранение цвета при очистке

jpegoptim --strip-all --keep-icc *.jpg

Подходит для изображений, где важен цветовой профиль.

Отчет по экономии

jpegoptim --max=85 --strip-all --totals *.jpg

Подходит для оценки эффекта оптимизации.

Проверка перед реальной обработкой

jpegoptim --max=85 --strip-all --noaction --totals *.jpg

Подходит для любого первого запуска на новой папке.

Сравнение с аналогами

Jpegoptim занимает узкую, но сильную нишу: он оптимизирует именно JPEG и хорошо работает в командной строке. Аналоги могут быть удобнее визуально, шире по форматам или агрессивнее по сжатию, но не всегда так просты для серверной автоматизации.

Программа Тип Форматы Сильная сторона Ограничение Когда выбирать Jpegoptim
Jpegoptim CLI JPEG/JFIF простая и быстрая JPEG-оптимизация, --max, --size, --strip-*, --workers нет GUI, нет resize, только JPEG когда нужна автоматизация и точная обработка JPG
MozJPEG CLI/библиотека JPEG сильное кодирование JPEG, progressive-оптимизация, trellis quantization сложнее для простых задач, чаще используется как набор утилит когда нужен более простой инструмент для уже готовых JPEG
jpegtran CLI JPEG lossless-трансформации, progressive/non-progressive, работа с DCT-данными не предназначен для lossy-ограничения качества как --max когда нужна простая команда с lossy и metadata-опциями
jpeg-recompress CLI JPEG подбор качества по метрикам восприятия медленнее и сложнее для массовой простой обработки когда важна скорость и предсказуемые параметры
ImageOptim GUI macOS JPEG, PNG, GIF и др. drag-and-drop, удобство для пользователя Mac, объединение нескольких оптимизаторов ориентирован на графический сценарий, не так удобен на Linux-сервере когда нужна CLI-автоматизация без интерфейса
Caesium Image Compressor GUI/CLI JPG, PNG, WebP визуальный контроль качества и пакетная обработка тяжелее и шире по задачам когда нужен легкий консольный JPEG-инструмент
ImageMagick CLI/библиотека множество форматов resize, конвертация, обработка изображений слишком универсален для простой JPEG-оптимизации когда задача — только уменьшить и очистить JPEG 

MozJPEG — более глубокий JPEG-кодировщик. Он полезен, когда нужно заново кодировать изображения и выжимать максимум из формата. В его возможностях есть progressive encoding с оптимизацией jpegrescan, trellis quantization и специальные таблицы квантования. Но для задачи быстро оптимизировать папку готовых JPG, удалить метаданные, задать --max=85 и получить статистику Jpegoptim проще.

jpegtran хорош для lossless-трансформаций JPEG: он может менять представление JPEG между baseline и progressive, выполнять некоторые преобразования без перекодирования пикселей и работать с DCT-данными. Но Jpegoptim удобнее, когда нужна прикладная команда для сжатия, целевого размера, очистки метаданных и пакетной обработки.

jpeg-recompress ориентирован на подбор минимального качества при сохранении воспринимаемого визуального качества. Он использует метрики вроде SSIM и может давать сильную экономию, но такой подход тяжелее и медленнее. Jpegoptim лучше подходит для простых, быстрых и повторяемых правил: --max=85, --strip-all, --dest, --workers.

ImageOptim удобнее для пользователя macOS, которому нужен drag-and-drop. Он объединяет несколько инструментов оптимизации, включая MozJPEG, pngquant, Pngcrush, 7zip, SVGO и Google Zopfli, удаляет метаданные и работает через графический интерфейс. Но для Linux-сервера, cron-задачи или CI-пайплайна Jpegoptim практичнее.

Caesium Image Compressor шире по форматам: в веб-версии заявлены JPG, PNG и WebP, есть режим качества, lossless compression и сохранение метаданных. Но если нужен минимальный инструмент именно для JPEG, без лишнего интерфейса, Jpegoptim остается более прямым решением.

Плюсы Jpegoptim

Простота

Команда для базовой оптимизации выглядит минимально:

jpegoptim photo.jpg

Для массового сжатия:

jpegoptim *.jpg

Для веб-подготовки:

jpegoptim --max=85 --strip-all --all-progressive *.jpg

Программа не требует сложной конфигурации для типовых задач.

Lossless-режим по умолчанию

Без дополнительных параметров Jpegoptim выполняет оптимизацию без потерь. Это безопаснее, чем инструменты, которые сразу пересохраняют изображение с потерей качества.

Есть lossy-режим

Если нужна сильная экономия, достаточно добавить --max:

jpegoptim --max=85 photo.jpg

Есть целевой размер

Для ограничений по весу используется --size:

jpegoptim --size=500k photo.jpg

Удобная очистка метаданных

Для публикации в интернете:

jpegoptim --strip-all photo.jpg

Для более точной очистки:

jpegoptim --strip-exif photo.jpgjpegoptim --strip-xmp photo.jpgjpegoptim --strip-icc photo.jpg

Подходит для автоматизации

Jpegoptim хорошо работает с find, xargs, stdin, stdout, CSV-выводом, списками файлов и параллельной обработкой.

Есть безопасные режимы

Для проверки:

jpegoptim --noaction photo.jpg

Для сохранения результата отдельно:

jpegoptim --dest=optimized photo.jpg

Есть параллельная обработка

Для больших папок:

jpegoptim --workers=4 *.jpg

Минусы Jpegoptim

Нет графического интерфейса

Пользователю, который хочет перетаскивать изображения мышкой и видеть превью, Jpegoptim будет неудобен. Это терминальная программа.

Только JPEG

Jpegoptim не решает задачи PNG, WebP, AVIF, GIF или SVG. Для смешанных медиапапок нужны другие инструменты.

Нет изменения размера

Если фотография 6000×4000 пикселей, Jpegoptim не уменьшит ее до 1600 пикселей по ширине. Он работает с JPEG-сжатием, а не с геометрией изображения.

Можно случайно перезаписать оригиналы

Стандартная работа на месте удобна, но требует осторожности. Для важных файлов лучше использовать --dest.

Lossy-сжатие необратимо

После --max или --size вернуть исходное качество нельзя, если нет копии оригинала.

Нет визуального контроля

Программа показывает размер и процент экономии, но не показывает изображение. Качество нужно проверять отдельно.

Для кого подходит Jpegoptim

Jpegoptim хорошо подходит:

  • веб-разработчикам;

  • администраторам сайтов;

  • SEO-специалистам, работающим со скоростью загрузки;

  • владельцам блогов и статических сайтов;

  • DevOps-инженерам;

  • Linux-пользователям;

  • администраторам серверов;

  • техническим редакторам;

  • владельцам интернет-магазинов;

  • тем, кто регулярно обрабатывает JPEG-папки;

  • тем, кто пишет автоматические скрипты.

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

Кому Jpegoptim не подойдет

Jpegoptim не лучший выбор, если нужно:

  • работать только мышкой;

  • видеть превью до/после;

  • сжимать PNG, WebP или AVIF;

  • менять разрешение;

  • кадрировать фотографии;

  • выполнять цветокоррекцию;

  • ретушировать изображения;

  • добавлять водяные знаки;

  • выбирать качество визуальным ползунком;

  • сравнивать несколько вариантов сжатия глазами прямо в интерфейсе.

В таких случаях лучше использовать графические программы или более универсальные конвертеры. Jpegoptim нужен не для визуального редактирования, а для точной JPEG-оптимизации.

Оптимальные настройки для разных задач

Для сайта

jpegoptim --max=85 --strip-all --all-progressive *.jpg

Хороший вариант для большинства веб-изображений.

Для качественного портфолио

jpegoptim --max=90 --strip-all --auto-mode *.jpg

Более щадящее качество и автоматический выбор режима JPEG.

Для архива без потерь

jpegoptim *.jpg

Без --max, без --size, без удаления метаданных.

Для приватной публикации

jpegoptim --strip-all --keep-icc *.jpg

Удаляются лишние данные, но сохраняется цветовой профиль.

Для жесткого лимита

jpegoptim --size=500k photo.jpg

Подходит, когда сервис не принимает файл больше указанного размера.

Для массовой серверной обработки

find ./uploads -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 |  xargs -0 jpegoptim --workers=4 --max=85 --strip-all --all-progressive --totals

Подходит для регулярной оптимизации медиапапки.

Практическая оценка программы

Jpegoptim — не самая красивая программа в привычном смысле, потому что у нее нет визуального интерфейса. Но для своей задачи она сделана правильно: запускается одной командой, быстро обрабатывает JPEG, дает контроль над качеством, умеет чистить метаданные и хорошо встраивается в автоматические процессы.

Ее главное преимущество — предсказуемость. Можно один раз подобрать команду и затем применять ее одинаково к любым папкам:

jpegoptim --max=85 --strip-all --all-progressive --totals *.jpg

Для сайта это почти идеальный формат: изображения становятся легче, метаданные удаляются, progressive JPEG улучшает восприятие загрузки, а статистика показывает реальную экономию.

Главный недостаток — отсутствие визуального контроля. Jpegoptim не скажет, стало ли изображение субъективно хуже. Он покажет байты и проценты, но оценка качества остается за пользователем. Поэтому для серьезной публикации правильный подход такой: сначала подобрать параметры на нескольких типичных изображениях, затем применять их массово.

FAQ

Можно ли сжимать JPEG без потери качества?

Да. Если запускать Jpegoptim без --max и --size, используется lossless-оптимизация. Она уменьшает файл за счет оптимизации JPEG-структуры, не снижая качество пиксельных данных.

jpegoptim photo.jpg

Как сжать JPEG сильнее?

Использовать --max:

jpegoptim --max=85 photo.jpg

Чем ниже значение, тем сильнее сжатие и выше риск артефактов.

Какой --max выбрать для сайта?

Для большинства веб-изображений разумно начинать с --max=85. Для фотографий с важными деталями лучше 90. Для фоновых и второстепенных картинок можно пробовать 80.

Как не перезаписать оригинал?

Использовать --dest:

mkdir optimizedjpegoptim --dest=optimized photo.jpg

Как удалить EXIF?

jpegoptim --strip-exif photo.jpg

Или удалить все метаданные:

jpegoptim --strip-all photo.jpg

Как сохранить ICC-профиль?

jpegoptim --strip-all --keep-icc photo.jpg

Как обработать все JPEG в папке?

jpegoptim *.jpg

Как обработать подпапки?

find ./images -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -0 jpegoptim

Как получить итоговую статистику?

jpegoptim --totals *.jpg

Как сначала проверить результат без изменений?

jpegoptim --noaction *.jpg

С lossy-сжатием:

jpegoptim --max=85 --noaction *.jpg

Как сжать до 500 КБ?

jpegoptim --size=500k photo.jpg

Почему файл не стал ровно 500 КБ?

--size пытается приблизиться к заданному размеру, но не всегда попадает точно. Это особенность подбора JPEG-сжатия. Иногда помогает повторный запуск на том же файле.

Можно ли использовать Jpegoptim для PNG?

Нет. Jpegoptim предназначен для JPEG/JFIF. Для PNG нужны другие инструменты.

Можно ли изменить размер изображения?

Нет. Jpegoptim не меняет ширину и высоту. Для resize нужен другой инструмент, после чего JPEG можно дополнительно оптимизировать Jpegoptim.

Можно ли восстановить качество после --max=70?

Нет, если нет оригинала. Lossy-сжатие необратимо.

Подходит ли Jpegoptim для WordPress-сайта?

Да, если есть доступ к серверу или локальной папке с изображениями. Jpegoptim можно использовать для обработки JPEG из uploads, но команды нужно запускать аккуратно и сначала проверять на копии.

Чем Jpegoptim отличается от ImageOptim?

ImageOptim — графическая macOS-программа с drag-and-drop и набором разных оптимизаторов. Jpegoptim — отдельная CLI-утилита для JPEG, удобная для серверов, скриптов и пакетной автоматизации.

Чем Jpegoptim отличается от MozJPEG?

MozJPEG — более глубокий JPEG-кодировщик. Jpegoptim проще как прикладной инструмент: оптимизировать готовые JPEG, задать --max, удалить метаданные, обработать папку, получить статистику.

Чем Jpegoptim отличается от jpegtran?

jpegtran ориентирован на lossless-трансформации JPEG. Jpegoptim удобнее для прикладного сжатия готовых файлов, потому что у него есть --max, --size, --strip-*, --dest, --workers и понятный вывод статистики.

Итог

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

Для безопасной оптимизации без потерь достаточно:

jpegoptim photo.jpg

Для подготовки JPEG к публикации на сайте:

jpegoptim --max=85 --strip-all --all-progressive photo.jpg

Для массовой обработки:

jpegoptim --workers=4 --max=85 --strip-all --all-progressive --totals *.jpg

Для защиты оригиналов:

mkdir optimizedjpegoptim --max=85 --strip-all --dest=optimized *.jpg

Jpegoptim лучше всего раскрывается в автоматизации: обработка медиапапок, оптимизация изображений для сайта, очистка метаданных, подготовка JPEG перед публикацией, регулярные серверные задачи. Это узкий инструмент, но именно поэтому он удобен: минимум лишнего, точные параметры, понятное поведение и хороший контроль над результатом.