Jpegoptim — специализированная программа для оптимизации JPEG/JFIF-файлов. Она не пытается быть универсальным графическим редактором, менеджером фотографий или конвертером всех форматов сразу. Ее задача уже и практичнее: уменьшить вес JPEG-изображений, сохранить приемлемое качество, очистить лишние метаданные и сделать это быстро, предсказуемо и удобно для пакетной обработки.
Главная особенность Jpegoptim — работа из командной строки. У программы нет классического окна с кнопками Открыть, Сохранить, Экспорт или Сжать. Ее интерфейс — это команда jpegoptim, параметры запуска и текстовый вывод в терминале. Такой подход особенно удобен для Linux-серверов, статических сайтов, CI/CD-пайплайнов, автоматической обработки медиапапок и любых сценариев, где нужно сжимать не одну картинку вручную, а десятки, сотни или тысячи JPEG-файлов по одинаковым правилам.
Скачать Jpegoptim
- Ретушь фото
- Русский интерфейс
- Просто для новичков
- Только командная строка
- Не для ретуши фото
- Только JPEG-сжатие
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 --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 --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-оптимизация с сохранением копии в отдельную папку.
-
Создать папку для результата:
mkdir optimized
-
Запустить Jpegoptim:
jpegoptim --dest=optimized photo.jpg
-
Проверить размер исходника и результата:
ls -lh photo.jpg optimized/photo.jpg
Если оптимизированная копия появилась, значит Jpegoptim смог уменьшить файл. Если файла в optimized нет, значит исходный JPEG не стал меньше, и программа не стала создавать бессмысленную копию.
Для одного файла это надежный вариант, потому что оригинал остается нетронутым.
Практическая инструкция: сжать одну фотографию с потерями
Если lossless-режима недостаточно, можно задать максимальное качество.
-
Создать папку:
mkdir optimized
-
Запустить сжатие:
jpegoptim --max=85 --dest=optimized photo.jpg
-
Проверить размер:
ls -lh photo.jpg optimized/photo.jpg
-
Открыть результат и визуально проверить качество.
Для более аккуратного качества:
jpegoptim --max=90 --dest=optimized photo.jpg
Для более сильного уменьшения:
jpegoptim --max=80 --dest=optimized photo.jpg
Для жесткого сжатия:
jpegoptim --max=70 --dest=optimized photo.jpg
Jpegoptim не показывает визуальное сравнение. Поэтому после lossy-сжатия нужно открыть результат в просмотрщике изображений и проверить мелкие детали, текст, лица, градиенты и контрастные границы.

На скриншоте показан характерный сценарий: пользователь находится в папке с изображениями и запускает 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 весит заметно больше, а после сжатия размер файла уменьшается в несколько раз. Для реальной работы важно смотреть не только на килобайты, но и на визуальное качество результата.
Практическая инструкция: удалить 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 меняет входные файлы, если они были оптимизированы. Поэтому перед массовой обработкой нужны понятные правила.
Безопасный порядок:
-
Сделать копию папки.
-
Запустить
--noaction. -
Проверить ожидаемую экономию.
-
Для lossy-режима выбрать умеренный
--max. -
Использовать
--dest, если оригиналы важны. -
После обработки открыть несколько файлов вручную.
-
Проверить изображения с текстом, лицами, мелкими деталями и градиентами.
Опасные команды для оригиналов:
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 перед публикацией, регулярные серверные задачи. Это узкий инструмент, но именно поэтому он удобен: минимум лишнего, точные параметры, понятное поведение и хороший контроль над результатом.