Jpegoptim: консольная утилита для оптимизации и сжатия JPEG-файлов
Jpegoptim — узкая и практичная программа для оптимизации JPEG/JFIF-файлов через командную строку. Это не графический редактор, не просмотрщик фотографий и не универсальный конвертер изображений. Программа делает одну задачу: уменьшает размер JPEG-файлов за счет оптимизации структуры изображения, управления качеством сжатия, удаления служебных маркеров и пакетной обработки файлов. Для сайта, интернет-магазина, блога, фотокаталога или серверной медиатеки Jpegoptim удобен тем, что работает быстро, предсказуемо и легко встраивается в скрипты.
Скачать Jpegoptim
Новейшая версия для Windows и macOS. Удобный редактор с ИИ и профессиональными функциями.
Главная особенность Jpegoptim — сочетание lossless-оптимизации и lossy-сжатия. В обычном режиме программа оптимизирует JPEG без намеренного снижения визуального качества: пересобирает данные так, чтобы файл занимал меньше места. При необходимости можно включить ограничение качества через --max или задать целевой размер через --size; тогда Jpegoptim уже пересжимает изображение и получает более заметное уменьшение веса файла. Синтаксис программы строится вокруг команды jpegoptim [options] [filenames], а сама работа идет в терминале, без окон, кнопок и визуальных панелей.

Для пользователя, который привык к интерфейсу с кнопками Открыть, Сохранить, Экспорт и Настройки, Jpegoptim сначала выглядит непривычно. Но именно консольный формат делает его сильным инструментом: можно обработать один файл, папку с сотнями фотографий, список изображений из файла, поток данных через stdin/stdout, cron-задачу на сервере или часть пайплайна публикации картинок на сайте.
Jpegoptim особенно хорошо подходит для ситуаций, где изображений много, а ручная обработка через графическую программу становится бессмысленно долгой. Типовой пример — папка с товарами интернет-магазина: фотографии уже подготовлены по размеру, кадрированию и цвету, но весят слишком много. Открывать каждую картинку в редакторе не нужно. Достаточно применить Jpegoptim к набору .jpg или .jpeg, задать безопасный каталог назначения и получить уменьшенные файлы для загрузки на сайт.
Что делает Jpegoptim
Jpegoptim оптимизирует и сжимает JPEG/JFIF-файлы. В обычном режиме программа использует lossless-оптимизацию, основанную на оптимизации таблиц Хаффмана. В режиме lossy пользователь задает верхний предел качества, и программа может пересжать изображения с более высоким исходным качеством до указанного уровня.
На практике это означает несколько конкретных задач:
уменьшить размер JPEG без заметного изменения картинки;
сжать фотографии для сайта;
подготовить изображения для быстрой загрузки страниц;
пакетно обработать папку с
.jpg;удалить EXIF, XMP, IPTC, ICC, комментарии и другие JPEG-маркеры;
сохранить важные метаданные, если они нужны;
перевести JPEG в progressive-формат;
получить файл примерно заданного размера;
вывести статистику экономии;
встроить оптимизацию JPEG в серверный сценарий.
Jpegoptim работает именно с JPEG/JFIF. Он не оптимизирует PNG, GIF, SVG, WebP или AVIF. Это важное отличие от более широких программ вроде FileOptimizer, ImageOptim или универсальных графических пакетов. Jpegoptim не пытается быть комбайном для всех форматов. Его задача — сжатие JPEG через командную строку.
Программа не меняет геометрию фотографии. Она не уменьшает ширину и высоту изображения, не обрезает края, не поворачивает снимок, не добавляет водяные знаки, не исправляет экспозицию и не делает цветокоррекцию. Если исходный файл имеет размер 4032×3024 пикселя, после стандартной оптимизации он останется 4032×3024 пикселя. Меняется только внутреннее представление JPEG и, при выбранных параметрах, набор метаданных или степень сжатия.
Где Jpegoptim полезен на практике
Jpegoptim нужен там, где JPEG-файлы уже готовы визуально, но требуют технической оптимизации. Это частая задача при публикации изображений в интернете. Фотография может быть нормальной по кадру и цвету, но содержать лишние EXIF-данные, XMP-блоки, комментарии, ICC-профили, служебные маркеры и просто неоптимальную JPEG-структуру. В результате файл грузится дольше, занимает больше места на диске и увеличивает вес страницы.
Вебмастер использует Jpegoptim для ускорения страниц. Разработчик подключает его к скрипту загрузки изображений. Администратор сервера запускает обработку по расписанию. SEO-специалист применяет его при подготовке медиатеки сайта. Владелец интернет-магазина уменьшает вес фотографий товаров, не меняя визуальную подачу карточек.
Самые частые сценарии:
| Сценарий | Как помогает Jpegoptim |
|---|---|
| Блог с большим количеством фотографий | Уменьшает вес JPEG перед публикацией |
| Интернет-магазин | Пакетно сжимает фото товаров |
| WordPress-медиатека | Может использоваться в серверной обработке загруженных изображений |
| Архив фотографий | Экономит место без ручного открытия файлов |
| Лендинги | Готовит JPEG для быстрой загрузки |
| CI/CD-пайплайн | Проверяет и оптимизирует изображения перед выкладкой |
Серверная папка /uploads | Обрабатывает новые файлы через скрипт |
| Каталог изображений | Позволяет сжать тысячи файлов одной командой |
Для обычного пользователя Jpegoptim может быть слишком техническим, потому что у него нет графического окна. Но для тех, кто работает с большим количеством изображений, командная строка здесь не недостаток, а преимущество. Одна команда заменяет десятки ручных действий.
Как устроен принцип работы
Jpegoptim работает с уже существующими JPEG-файлами. Он читает файл, анализирует его структуру, оптимизирует данные и записывает результат. В зависимости от параметров программа может сохранить исходное качество, пересжать файл с ограничением качества, удалить метаданные, сохранить определенные маркеры, вывести результат в другой каталог или отправить оптимизированное изображение в стандартный вывод.
У Jpegoptim есть два основных режима.
Lossless-оптимизация
Lossless-режим включен по умолчанию. Он нужен, когда нельзя снижать качество картинки. Программа оптимизирует JPEG за счет таблиц Хаффмана и служебной структуры файла. Это дает безопасное уменьшение веса, но результат зависит от исходника. Если файл уже был хорошо оптимизирован, экономия может быть небольшой или нулевой. Если снимок сохранен неоптимально, уменьшение будет заметнее.
Команда выглядит просто:
jpegoptim photo.jpgТакой запуск оптимизирует файл на месте. Это поведение важно учитывать: Jpegoptim по умолчанию изменяет входные файлы, если оптимизированная версия получается меньше. Для сохранения оригиналов используется --dest.
Lossy-сжатие
Lossy-режим включается, когда пользователь задает ограничение качества через --max или целевой размер через --size. В этом случае Jpegoptim может пересжать JPEG, чтобы получить более сильное уменьшение размера. Такой режим уже не является полностью обратимым: визуальные потери могут быть незаметными, умеренными или выраженными — зависит от выбранного значения качества и исходного файла.
Пример:
jpegoptim --max=85 photo.jpgПараметр --max=<quality> задает максимальный фактор качества. Допустимый диапазон — от 0 до 100. Если исходный файл был сохранен с более высоким качеством, Jpegoptim может пересжать его до указанного предела. Если файл уже имеет более низкий уровень качества, программа применит lossless-оптимизацию.
Интерфейс Jpegoptim
У Jpegoptim нет графического интерфейса. В нем нет кнопок Добавить файлы, Начать, Сохранить как или Настройки качества. Интерфейс программы — это команда jpegoptim, параметры и вывод в терминале.
Базовая схема такая:
jpegoptim [options] [filenames]Программа принимает один файл, несколько файлов, маску файлов или список из внешнего источника. После запуска она выводит строку результата по каждому изображению. В этой строке обычно видны:
имя файла;
разрешение изображения;
глубина цвета;
тип JPEG;
наличие маркеров, например
ExifилиJFIF;статус обработки;
исходный размер;
итоговый размер;
процент экономии;
итоговое действие:
optimized,skippedи т.п.
Пример вывода:
photo.jpg 4032x3024 24bit N Exif JFIF [OK] 4950376 --> 4872871 bytes (1.57%), optimized.Такой вывод сообщает, что файл photo.jpg был обработан, имел разрешение 4032×3024, содержал Exif/JFIF-маркеры, успешно прошел проверку, уменьшился с 4 950 376 до 4 872 871 байт и был оптимизирован.
Для просмотра доступных параметров используется:
jpegoptim --helpВ справке отображаются короткие и длинные варианты опций. Например, -d и --dest задают каталог назначения, -m и --max ограничивают качество, -S и --size задают целевой размер, -s и --strip-all удаляют маркеры, -t и --totals выводят итоговую статистику, -q и --quiet включают тихий режим.
Для Jpegoptim это и есть полноценный рабочий интерфейс. В нем нет лишних визуальных элементов, поэтому программа удобна для автоматизации: каждое действие явно выражено командой.
Первый запуск и базовая оптимизация
Самый простой запуск — обработка одного файла:
jpegoptim image.jpgКоманда оптимизирует image.jpg и сохраняет результат вместо исходного файла, если итоговый размер меньше. Это удобно, когда исходники уже не нужны или есть резервная копия. Но для первого знакомства лучше использовать безопасный вариант с отдельной папкой.
mkdir optimizedjpegoptim --dest=optimized image.jpgПараметр --dest=optimized отправляет результат в каталог optimized. Если файл не удается уменьшить, Jpegoptim не создает его копию в каталоге назначения. Это поведение важно: отсутствие файла в папке результата не всегда означает ошибку, иногда программа просто не нашла способ сделать его меньше.
Для нескольких файлов команда выглядит так:
jpegoptim image1.jpg image2.jpg image3.jpgДля всех JPEG в текущей папке:
jpegoptim *.jpgДля файлов с расширением .jpeg:
jpegoptim *.jpegДля смешанного набора можно использовать оболочку:
jpegoptim *.jpg *.jpegПри обработке большого количества файлов полезно добавить итоговую статистику:
jpegoptim --totals *.jpgПараметр --totals печатает общий итог после обработки всех файлов.

На скриншоте видно типичное поведение программы: пользователь запускает jpegoptim tecmint.jpeg, после чего Jpegoptim показывает параметры изображения, исходный размер, новый размер и процент уменьшения. Это именно тот формат вывода, с которым приходится работать при обычной оптимизации JPEG через командную строку.
Безопасная работа с оригиналами
Главное правило при работе с Jpegoptim: не запускать агрессивные параметры сразу по единственным исходникам. Программа рассчитана на прямую обработку файлов, и это нормально для серверных задач, но при первом запуске лучше использовать отдельный каталог результата.
Безопасная схема:
mkdir optimizedjpegoptim --dest=optimized *.jpgЕще осторожнее — сначала выполнить проверку без изменения файлов:
jpegoptim --noaction *.jpgПараметр --noaction не оптимизирует файлы физически, а только выводит предполагаемый результат. Он полезен перед массовой обработкой, когда нужно понять, сколько места можно сэкономить и какие файлы будут изменены.
Для сохранения времени изменения используется:
jpegoptim --preserve *.jpgПараметр --preserve сохраняет время модификации файла. Это важно для архивов, резервных копий, медиатек и систем, где дата файла используется для сортировки или синхронизации.
Для сохранения прав доступа применяется:
jpegoptim --preserve-perms *.jpg--preserve-perms сохраняет права файла, владельца и группу через более осторожный режим замены. При этом Jpegoptim создает временную резервную копию с расширением .jpegoptim.bak, а затем удаляет ее после успешной замены файла.
Если результат пишется в отдельную папку, а файл с таким именем там уже есть, используется:
jpegoptim --dest=optimized --overwrite image.jpg--overwrite перезаписывает целевой файл при работе с --dest. Без него Jpegoptim не должен молча затирать уже существующий результат в папке назначения.
Сжатие JPEG без потери качества
Для сжатия JPEG без намеренного ухудшения качества достаточно базового запуска:
jpegoptim photo.jpgили пакетно:
jpegoptim *.jpgТакой режим подходит для рабочих изображений, где нельзя рисковать визуальными артефактами: фотографии товаров, портфолио, иллюстрации в статьях, изображения для документации, карточки программ, скриншоты интерфейсов. Jpegoptim не меняет разрешение и не снижает качество через повторное JPEG-кодирование, если пользователь не указал параметры lossy-сжатия.
Более безопасный вариант:
mkdir optimizedjpegoptim --dest=optimized *.jpgКоманда обработает изображения и положит уменьшенные версии в отдельную папку. Оригиналы останутся на месте.
В lossless-режиме экономия обычно умеренная. Не стоит ожидать, что каждый JPEG уменьшится на 50–70%. Если файл уже был сохранен оптимизатором или современным редактором с хорошими настройками, Jpegoptim может показать skipped или небольшую экономию. Это нормальный результат: программа не придумывает лишнее сжатие там, где без потери качества его уже почти нет.
Сжатие с ограничением качества через --max
Для более заметного уменьшения веса используется параметр --max=<quality>:
jpegoptim --max=85 image.jpgКороткая форма:
jpegoptim -m85 image.jpgЭтот параметр задает верхний предел качества JPEG. Диапазон значений — от 0 до 100. Чем меньше число, тем сильнее сжатие и выше риск заметных артефактов. Для веб-графики часто тестируют диапазон 75–90, но универсального значения нет: фотография, скриншот, градиент, товар на белом фоне и изображение с мелким текстом реагируют на сжатие по-разному.
Практические команды:
jpegoptim --max=90 photo.jpgjpegoptim --max=85 photo.jpgjpegoptim --max=80 photo.jpgДля пакетной обработки с сохранением результата в отдельную папку:
mkdir optimizedjpegoptim --max=85 --dest=optimized *.jpgДля сайта можно совместить ограничение качества, удаление лишних маркеров и progressive JPEG:
jpegoptim --max=85 --strip-all --all-progressive --dest=optimized *.jpgТакая команда делает три действия: пересжимает слишком тяжелые JPEG до максимального качества 85, удаляет метаданные и принудительно делает результат progressive JPEG. Но ее нельзя применять вслепую к единственным исходникам: --max меняет качество, а --strip-all удаляет метаданные.
Для сравнения результата стоит обработать несколько копий с разными параметрами и проверить визуально:
mkdir q90 q85 q80jpegoptim --max=90 --dest=q90 image.jpgjpegoptim --max=85 --dest=q85 image.jpgjpegoptim --max=80 --dest=q80 image.jpgПосле этого можно открыть три версии и сравнить детали: текстуру кожи, мелкий текст, градиенты, края предметов, фон, тени и шум. Оптимизация JPEG для сайта — это баланс между размером и качеством, а не механическое применение одного числа ко всем изображениям.
Сжатие до заданного размера через --size
Параметр --size=<size> нужен, когда файл должен попасть в ограничение по весу. Например, изображение нужно сделать не больше 250 КБ или примерно уменьшить до 70% от исходного размера.
Пример с размером в килобайтах:
jpegoptim --size=250k photo.jpgКороткая форма:
jpegoptim -S250k photo.jpgПример с процентом от исходного размера:
jpegoptim --size=70% photo.jpg--size отключает чистый lossless-режим и подбирает сжатие так, чтобы приблизиться к указанному размеру. Цель можно задавать в килобайтах или процентах от исходного файла. Для процентов используется диапазон от 1% до 99%.
Важное ограничение: итоговый размер не всегда получается точно таким, как указан в параметре. Для JPEG это нормальная особенность, потому что размер зависит от содержимого изображения, структуры блоков, метаданных и эффективности кодирования. Повторный запуск иногда приближает результат к цели.
Для безопасной обработки:
mkdir resizedjpegoptim --size=250k --dest=resized *.jpgДля предварительной оценки:
jpegoptim --noaction --size=250k *.jpg--size особенно полезен при ограничениях загрузки: сайт принимает изображения только до определенного веса, CMS режет файлы по лимиту, API не пропускает тяжелые вложения, а маркетплейс требует соблюсти максимальный размер JPEG. Но использовать этот параметр нужно аккуратно: чтобы уложиться в жесткий лимит, программа может заметно снизить качество изображения.

На этом примере Jpegoptim запускается с параметром --size=250k. В выводе видно, что программа пересчитала JPEG и уменьшила файл до размера, близкого к заданному лимиту. Такой режим нужен не для архивного хранения, а для практических ограничений: загрузка на сайт, отправка через форму, подготовка веб-копии или уменьшение тяжелого фото под конкретный лимит.
Управление метаданными
JPEG-файл содержит не только пиксели. Внутри могут быть EXIF-данные камеры, GPS-координаты, профиль цвета ICC, XMP-блоки, IPTC-информация, комментарии, JFIF-маркеры, Adobe-маркеры и другие служебные данные. Эти блоки могут быть полезны в архиве, но для сайта часто становятся лишним весом и потенциальной проблемой приватности.
По умолчанию Jpegoptim сохраняет распространенные метаданные: EXIF, IPTC, ICC, XMP и COM, а неизвестные маркеры отбрасывает. Для более жесткой очистки используются параметры --strip-*; для сохранения конкретных блоков — --keep-*.
Полное удаление маркеров
jpegoptim --strip-all image.jpgКороткая форма:
jpegoptim -s image.jpg--strip-all удаляет маркеры из выходного файла. При этом некоторые служебные маркеры вроде JFIF или Adobe APP14 могут быть созданы JPEG-библиотекой автоматически в зависимости от цветового пространства.
Для сайта команда часто выглядит так:
jpegoptim --strip-all --max=85 --dest=optimized *.jpgОна уменьшает файл за счет пересжатия и удаления метаданных. Это удобно для публичных копий изображений, но не для архива оригиналов.
Удаление EXIF
jpegoptim --strip-exif photo.jpgEXIF может содержать модель камеры, параметры съемки, дату, ориентацию, иногда координаты. Для публичной публикации удаление EXIF часто оправдано. Но если система использует EXIF-ориентацию или важны данные съемки, удалять этот блок не стоит без проверки.
Удаление ICC-профиля
jpegoptim --strip-icc photo.jpgICC-профиль влияет на интерпретацию цвета. Удаление ICC может уменьшить файл, но иногда приводит к изменению цветопередачи в программах и браузерах, особенно если изображение не в стандартном sRGB-представлении. Для фотографий товаров, где важен цвет, --strip-icc нужно тестировать отдельно.
Удаление комментариев
jpegoptim --strip-com image.jpgCOM-маркеры содержат комментарии внутри JPEG. Обычно они не нужны для веб-публикации.
Удаление XMP
jpegoptim --strip-xmp image.jpgXMP может хранить данные редакторов, каталогизаторов, авторские поля, историю обработки и другую служебную информацию. Для публичных копий XMP чаще всего удаляют.
Удаление IPTC
jpegoptim --strip-iptc image.jpgIPTC часто используется в редакционных и фотобанковых сценариях: автор, описание, ключевые слова, права. В медиаредакции эти данные важны, а для обычной публикации на сайте могут быть лишними.
Сохранение нужных маркеров
Иногда нужно удалить почти все, но оставить конкретные блоки:
jpegoptim --strip-all --keep-icc image.jpgили:
jpegoptim --strip-all --keep-exif --keep-icc image.jpgТакой подход удобен, когда надо очистить JPEG, но сохранить цветовой профиль или данные съемки. --keep-exif, --keep-iptc, --keep-icc, --keep-xmp, --keep-com, --keep-jfif, --keep-jfxx и --keep-adobe позволяют точечно управлять тем, что остается в выходном файле.
Полное сохранение маркеров
jpegoptim --keep-all image.jpgили:
jpegoptim --strip-none image.jpg--keep-all и --strip-none сохраняют маркеры в изображении, кроме тех, которые пересоздаются JPEG-библиотекой. Если указан этот режим, остальные --strip-* и --keep-* игнорируются.
Progressive JPEG и обычный JPEG
Jpegoptim умеет управлять режимом progressive JPEG. Это важно для веб-страниц: progressive JPEG загружается поэтапно, сначала показывая грубую версию изображения, затем уточняя детали. Визуально это может восприниматься лучше на медленном соединении, особенно для крупных фотографий.
Сделать выходной файл progressive JPEG:
jpegoptim --all-progressive image.jpgДля всех файлов:
jpegoptim --all-progressive *.jpgВернуть обычный non-progressive JPEG:
jpegoptim --all-normal image.jpgАвтоматически выбрать режим, который дает меньший размер:
jpegoptim --auto-mode image.jpg--auto-mode выбирает progressive или non-progressive режим по меньшему выходному размеру. По умолчанию Jpegoptim сохраняет исходный режим progressive/non-progressive.
Для принудительного перевода normal JPEG в progressive может потребоваться --force, потому что без него программа не всегда будет переписывать файл, если результат не меньше:
jpegoptim --force --all-progressive image.jpgДля сайта практичная команда выглядит так:
jpegoptim --max=85 --strip-all --all-progressive --dest=optimized *.jpgНо для изображений с мелким текстом, интерфейсными скриншотами и тонкими линиями progressive JPEG надо проверять визуально. Сам по себе progressive-режим не ухудшает качество, но в сочетании с агрессивным --max результат может быть хуже, чем ожидается.
Пакетная обработка папок
Сильная сторона Jpegoptim — пакетная оптимизация JPEG. Для текущей папки достаточно:
jpegoptim *.jpgДля отдельного каталога:
jpegoptim /var/www/site/uploads/*.jpgДля сохранения результата в отдельную папку:
mkdir /var/www/site/uploads-optimizedjpegoptim --dest=/var/www/site/uploads-optimized /var/www/site/uploads/*.jpgДля рекурсивной обработки вложенных папок обычно используется find:
find ./images -type f -iname "*.jpg" -exec jpegoptim {} ;С ограничением качества:
find ./images -type f -iname "*.jpg" -exec jpegoptim --max=85 {} ;С удалением метаданных:
find ./images -type f -iname "*.jpg" -exec jpegoptim --strip-all {} ;С комбинацией для сайта:
find ./images -type f -iname "*.jpg" -exec jpegoptim --max=85 --strip-all --all-progressive {} ;Для предварительной проверки:
find ./images -type f -iname "*.jpg" -exec jpegoptim --noaction --max=85 --strip-all {} ;Если нужно обработать и .jpg, и .jpeg:
find ./images -type f ( -iname "*.jpg" -o -iname "*.jpeg" ) -exec jpegoptim --max=85 --strip-all {} ;Пакетная обработка особенно полезна после импорта старой медиатеки, переноса сайта, выгрузки каталога товаров, подготовки фотографий для CDN или массовой загрузки изображений в CMS.

Этот скриншот хорошо показывает, что Jpegoptim не имеет отдельного графического окна. Работа идет прямо в терминале: пользователь вызывает исполняемый файл и получает список параметров. Для CLI-утилиты это нормальный интерфейс, потому что основные задачи выполняются не мышью, а командами.
Обработка списка файлов
Jpegoptim умеет читать список файлов из отдельного файла через --files-from и из стандартного ввода через --files-stdin. Это удобно, когда нужно обработать не всю папку, а только отобранные изображения.
Файл list.txt:
images/photo-01.jpgimages/photo-02.jpgimages/product/card-main.jpgimages/blog/header.jpegКоманда:
jpegoptim --files-from=list.txtЕсли список формируется другой командой:
find ./uploads -type f -mtime -1 -iname "*.jpg" | jpegoptim --files-stdinТак можно обрабатывать только новые изображения за последний день, только файлы из определенной категории, только картинки, которые прошли фильтр по размеру, или только те изображения, которые были изменены в системе контроля версий.
Для серверной автоматизации --files-from и --files-stdin удобнее, чем маска *.jpg, потому что список можно сформировать заранее, проверить, сохранить в лог и повторить обработку при необходимости.
Многопоточность и скорость
Для ускорения пакетной обработки используется параметр --workers=<max>:
jpegoptim --workers=4 *.jpgКороткая форма:
jpegoptim -w4 *.jpgПо умолчанию Jpegoptim запускает один процесс. --workers задает максимальное количество параллельных процессов.
Это полезно при обработке сотен и тысяч JPEG. Например:
jpegoptim --workers=8 --max=85 --strip-all *.jpgНа многоядерном процессоре такая команда может обработать каталог быстрее, чем последовательный запуск. Но число потоков не стоит ставить бездумно. Если изображения находятся на медленном диске, сетевом хранилище или сервер одновременно обслуживает сайт, слишком большой --workers может создать лишнюю нагрузку на CPU и I/O.
Практический подход:
| Условия | Разумный старт |
|---|---|
| Рабочий ноутбук | --workers=2 или --workers=4 |
| Сервер с активным сайтом | --workers=2 и запуск вне пиковых часов |
| Отдельная машина для обработки | --workers=4, --workers=8 или больше после теста |
| Медленный HDD | Лучше меньше потоков |
| SSD/NVMe и много CPU | Можно тестировать больше потоков |
Для оценки скорости удобно сначала обработать небольшую папку:
time jpegoptim --workers=4 --max=85 --strip-all test/*.jpgЗатем сравнить с:
time jpegoptim --workers=1 --max=85 --strip-all test/*.jpgТак понятно, упирается задача в процессор, диск или саму структуру изображений.
Вывод статистики
Jpegoptim выводит понятную строку обработки по каждому файлу. Для общей оценки добавляется --totals:
jpegoptim --totals *.jpgПараметр выводит итог после обработки всех файлов. Это удобно, когда нужно понять, сколько места было сэкономлено в папке.
Для более подробного вывода используется:
jpegoptim --verbose image.jpg--verbose включает расширенный режим сообщений. Он полезен при диагностике, тестировании и разборе проблемных JPEG.
Для тихого режима:
jpegoptim --quiet *.jpg--quiet уменьшает объем вывода. Это удобно в скриптах, где не нужен подробный лог по каждому файлу.
Для машинной обработки есть CSV-формат:
jpegoptim --csv *.jpg--csv печатает информацию о ходе обработки в CSV-формате. Такой вывод можно сохранять в файл и анализировать дальше:
jpegoptim --csv --totals *.jpg > report.csvCSV-отчет полезен при аудите медиатеки: можно увидеть, какие изображения уменьшаются сильнее, какие уже были оптимизированы, какие содержат метаданные и где есть смысл менять настройки.
Работа через stdin и stdout
Jpegoptim можно использовать не только с файлами на диске, но и в потоковых сценариях. Параметр --stdin читает один JPEG из стандартного ввода и отправляет результат в стандартный вывод. При --stdin параметр --stdout подразумевается автоматически.
Пример:
jpegoptim --stdin < input.jpg > output.jpgДля отправки результата в стандартный вывод из файла:
jpegoptim --stdout image.jpg > output.jpgЭто удобно в пайплайнах, где изображение не обязательно должно сохраняться во временный файл между этапами. Например, другой процесс передает JPEG в stdin, Jpegoptim оптимизирует его, а результат уходит дальше.
Но потоковый режим имеет ограничения. --stdin читает только один файл, а файлы, указанные в командной строке, игнорируются. Кроме того, --save-extra не работает, если входной JPEG читается из стандартного ввода.
Для большинства вебмастерских задач проще работать с обычными файлами и каталогами. stdin/stdout нужен в более технических сценариях: обработка через API, микросервис, PHP/Python-обвязку, контейнерную задачу или пайплайн с другими CLI-инструментами.
Использование в серверной автоматизации
Jpegoptim хорошо подходит для серверной автоматизации. Его можно запускать после загрузки изображения, по расписанию, при деплое сайта, после экспорта каталога товаров или во время подготовки статической сборки.
Простой сценарий для папки загрузок:
find /var/www/site/uploads -type f -iname "*.jpg" -exec jpegoptim --max=85 --strip-all --all-progressive {} ;Более осторожный вариант с обработкой только файлов за последние сутки:
find /var/www/site/uploads -type f -iname "*.jpg" -mtime -1 -exec jpegoptim --max=85 --strip-all --all-progressive {} ;Вариант с dry-run:
find /var/www/site/uploads -type f -iname "*.jpg" -mtime -1 -exec jpegoptim --noaction --max=85 --strip-all {} ;Вариант с логом:
find /var/www/site/uploads -type f -iname "*.jpg" -mtime -1 -print0 | xargs -0 jpegoptim --max=85 --strip-all --totals >> /var/log/jpegoptim.logДля сайтов на CMS удобна логика: оригинал сохраняется отдельно, публичная копия проходит через Jpegoptim. Так можно избежать необратимой потери качества и метаданных. Особенно это важно для фотографий товаров, где исходник может понадобиться для новой карточки, маркетплейса, печати или повторной обработки.
Jpegoptim для WordPress
В WordPress Jpegoptim полезен не как плагин с кнопкой в админке, а как серверная утилита для обработки медиатеки. Самый простой сценарий — периодически оптимизировать JPEG в папке загрузок:
find wp-content/uploads -type f ( -iname "*.jpg" -o -iname "*.jpeg" ) -exec jpegoptim --max=85 --strip-all --all-progressive {} ;Но для WordPress нужно учитывать несколько моментов.
Во-первых, в папке uploads лежат не только оригиналы, но и миниатюры разных размеров. Если обработать всё сразу, изменятся и основные изображения, и сгенерированные копии.
Во-вторых, удаление EXIF может быть нежелательным для фотоблога, сайта фотографа или медиаархива. В таких случаях лучше оставить EXIF:
find wp-content/uploads -type f -iname "*.jpg" -exec jpegoptim --max=85 --strip-all --keep-exif --keep-icc {} ;В-третьих, если важна цветопередача, лучше не удалять ICC:
find wp-content/uploads -type f -iname "*.jpg" -exec jpegoptim --max=85 --strip-all --keep-icc {} ;В-четвертых, перед массовым запуском стоит выполнить --noaction:
find wp-content/uploads -type f -iname "*.jpg" -exec jpegoptim --noaction --max=85 --strip-all {} ;Для WordPress Jpegoptim особенно полезен на сайтах, где уже накопилась большая медиатека, а графические плагины не справляются, создают нагрузку или не дают нужного контроля над метаданными.
Jpegoptim для интернет-магазина
В интернет-магазине JPEG-файлы влияют на скорость карточек товара, галерей, категорий и поисковой выдачи внутри сайта. Фотографии товаров часто создаются партиями: основное фото, ракурсы, детали, упаковка, инструкция, сравнение размеров. Даже небольшая экономия на каждом файле дает заметный результат на каталоге из тысяч изображений.
Практичная команда для публичных копий:
jpegoptim --max=85 --strip-all --keep-icc --all-progressive --dest=optimized *.jpgПочему именно так:
--max=85снижает вес тяжелых JPEG;--strip-allудаляет лишние служебные данные;--keep-iccпомогает сохранить цветовой профиль;--all-progressiveделает изображения удобнее для веб-загрузки;--dest=optimizedне трогает исходники.
Для товаров на белом фоне нужно внимательно проверять края предметов, мелкие надписи, текстуру, логотипы и тени. Слишком агрессивное значение --max=70 может дать грязь вокруг контрастных границ и ухудшить восприятие товара. Поэтому лучше сравнивать 90, 85 и 80 на реальных карточках.
Тестовая схема:
mkdir q90 q85 q80jpegoptim --max=90 --strip-all --keep-icc --dest=q90 *.jpgjpegoptim --max=85 --strip-all --keep-icc --dest=q85 *.jpgjpegoptim --max=80 --strip-all --keep-icc --dest=q80 *.jpgПосле этого выбирается настройка, при которой карточка выглядит чисто, а вес файла уже достаточно снижен.
Jpegoptim для архива изображений
Для архива фотографий Jpegoptim лучше использовать в lossless-режиме:
jpegoptim --preserve *.jpgили с сохранением всех маркеров:
jpegoptim --keep-all --preserve *.jpgАрхив — не то место, где стоит бездумно применять --strip-all и --max. EXIF, IPTC, XMP и ICC могут быть важнее нескольких процентов экономии. В архиве полезны дата съемки, камера, объектив, автор, описание, ключевые слова, цветовой профиль и история обработки.
Хорошая схема для архива:
mkdir optimizedjpegoptim --keep-all --preserve --dest=optimized *.jpgТак исходники остаются нетронутыми, а оптимизированная копия сохраняет метаданные настолько, насколько это позволяет режим обработки.
Если архив используется только для веб-публикации, можно создать отдельную публичную папку:
mkdir publicjpegoptim --max=85 --strip-all --keep-icc --dest=public *.jpgВ таком случае есть оригиналы для хранения и облегченные JPEG для сайта.
Jpegoptim для разработчика
Для разработчика Jpegoptim удобен тем, что поведение программы легко выразить в командах и скриптах. Его можно добавить в Makefile, npm-скрипт, shell-скрипт, Git hook, CI/CD-задачу или Docker-образ.
Пример Makefile:
optimize-jpg: find public/images -type f ( -iname "*.jpg" -o -iname "*.jpeg" ) -exec jpegoptim --max=85 --strip-all --all-progressive {} ;Пример shell-скрипта:
#!/usr/bin/env bashset -eSRC="./public/images"LOG="./jpegoptim-report.log"find "$SRC" -type f ( -iname "*.jpg" -o -iname "*.jpeg" ) -print0 | xargs -0 jpegoptim --max=85 --strip-all --all-progressive --totals | tee "$LOG"Пример обработки только измененных файлов в Git:
git diff --name-only --diff-filter=ACM | grep -Ei '.(jpg|jpeg)$' | jpegoptim --files-stdin --max=85 --strip-allДля CI/CD лучше не изменять файлы молча, а сначала проверять, какие изображения нуждаются в оптимизации. Например:
jpegoptim --noaction --csv public/images/*.jpgЗатем по отчету можно решить, падать ли сборке, автоматически оптимизировать файлы или просто выводить предупреждение.
Практические команды для разных задач
Просто уменьшить JPEG без потери качества
jpegoptim image.jpgОбработать все JPEG в папке
jpegoptim *.jpgСохранить результат в отдельную папку
mkdir optimizedjpegoptim --dest=optimized *.jpgПроверить результат без изменения файлов
jpegoptim --noaction *.jpgСжать до качества не выше 85
jpegoptim --max=85 *.jpgСжать до 250 КБ
jpegoptim --size=250k image.jpgУменьшить примерно до 70% от исходного размера
jpegoptim --size=70% image.jpgУдалить все метаданные
jpegoptim --strip-all image.jpgУдалить все, но сохранить ICC-профиль
jpegoptim --strip-all --keep-icc image.jpgУдалить все, но сохранить EXIF и ICC
jpegoptim --strip-all --keep-exif --keep-icc image.jpgСделать progressive JPEG
jpegoptim --all-progressive image.jpgАвтоматически выбрать progressive или обычный режим
jpegoptim --auto-mode image.jpgОбработать папку рекурсивно
find ./images -type f ( -iname "*.jpg" -o -iname "*.jpeg" ) -exec jpegoptim --max=85 --strip-all {} ;Запустить в несколько процессов
jpegoptim --workers=4 --max=85 --strip-all *.jpgПолучить CSV-отчет
jpegoptim --csv --totals *.jpg > report.csvЧитать список файлов из файла
jpegoptim --files-from=list.txt --max=85 --strip-allЧитать список файлов из stdin
find ./images -type f -iname "*.jpg" | jpegoptim --files-stdin --max=85Потоковая обработка одного JPEG
jpegoptim --stdin < input.jpg > output.jpgРазбор параметров Jpegoptim
| Параметр | Что делает | Когда использовать |
|---|---|---|
--dest=<path> / -d | Сохраняет результат в другую папку | Для безопасной работы с оригиналами |
--force / -f | Принудительно оптимизирует, даже если результат больше | Для смены progressive/non-progressive или тестов |
--help / -h | Показывает справку | При проверке доступных параметров |
--max=<quality> / -m | Задает максимальное качество JPEG | Для сильного сжатия под веб |
--noaction / -n | Только показывает результат, не меняет файлы | Перед массовой обработкой |
--size=<size> / -S | Пытается получить заданный размер | Когда есть лимит по весу файла |
--threshold=<n> / -T | Не меняет файл, если выигрыш ниже порога | Чтобы не трогать файлы ради минимальной экономии |
--workers=<n> / -w | Запускает несколько параллельных процессов | Для больших папок |
--csv / -b | Выводит прогресс в CSV | Для отчетов и автоматизации |
--overwrite / -o | Перезаписывает результат в --dest | Когда целевая папка уже содержит файлы |
--preserve / -p | Сохраняет время изменения | Для архивов и синхронизации |
--preserve-perms / -P | Сохраняет права доступа | Для серверных каталогов |
--quiet / -q | Уменьшает вывод | Для скриптов |
--retry / -r | Повторяет сжатие, пока размер уменьшается | Только вместе с --max или --size |
--totals / -t | Показывает общий итог | Для оценки экономии |
--verbose / -v | Подробный вывод | Для диагностики |
--auto-mode | Выбирает progressive/non-progressive по меньшему размеру | Для автоматической оптимизации режима JPEG |
--all-progressive | Делает выходные файлы progressive | Для веб-изображений |
--all-normal | Делает выходные файлы non-progressive | Для совместимости или единообразия |
--stdout | Отправляет результат в stdout | Для потоковой обработки |
--stdin | Читает один JPEG из stdin | Для пайплайнов |
--files-from=<file> | Читает список файлов из файла | Для выборочной обработки |
--files-stdin | Читает список файлов из stdin | Для связки с find, git, другими командами |
--retry заслуживает отдельного комментария. Он повторяет сжатие, пока выходной файл продолжает уменьшаться. Это может дать несколько дополнительных байт экономии, но увеличивает время обработки. Параметр имеет смысл только вместе с --max или --size.
Работа с поврежденными и нестандартными JPEG
Jpegoptim пытается оптимизировать файлы, которые может декодировать, даже если при декодировании возникают предупреждения. Иногда это фактически чинит проблемный JPEG, потому что файл пересобирается в более корректный вид. Если такое поведение нежелательно, используется --nofix:
jpegoptim --nofix image.jpg--nofix пропускает файлы с ошибками или предупреждениями при распаковке. Это полезно в архивах и юридически значимых коллекциях, где нельзя менять проблемный файл автоматически.
Для нестандартных JPEG может быть важен параметр --save-extra:
jpegoptim --save-extra image.jpgОн сохраняет дополнительные данные после конца JPEG-изображения. По умолчанию такие данные отбрасываются. Параметр может быть полезен, если в файле есть нестандартное расширение, не являющееся частью JPEG-изображения. Но при чтении из stdin этот режим не работает.
В обычной веб-оптимизации --nofix и --save-extra требуются редко. Но для архивов, старых коллекций и нестандартных файлов они важны: позволяют точнее контролировать, что Jpegoptim делает с входным JPEG.
История версий Jpegoptim
Jpegoptim развивается давно, и история изменений хорошо показывает, как программа из простой утилиты для оптимизации JPEG стала более гибким инструментом для серверной и пакетной обработки.
Первые публичные версии заложили базовую идею: командная строка, обработка JPEG, принудительная оптимизация и переносимость между платформами. В ветке 1.2 появились важные параметры для перезаписи и сохранения времени файлов, а также управление удалением EXIF и комментариев. В версии 1.2.3 добавлена поддержка IPTC и ICC-профилей.
Крупный шаг произошел в 1.3.0: появилась поддержка progressive JPEG, параметры --all-normal и --all-progressive, а также --size для задания целевого размера выходного файла. Это сделало Jpegoptim более полезным для веб-публикации, где важно не только уменьшить JPEG без потерь, но и управлять форматом загрузки изображения.
В 1.3.1 добавлены XMP-маркеры и CSV-вывод. Это усилило программу как инструмент для автоматизации и отчетности. В 1.4.0 Jpegoptim перешел к использованию памяти вместо временных файлов при оптимизации, получил поддержку чтения из stdin и записи в stdout, а также параметр --strip-none для сохранения маркеров.
В 1.4.2 появился --preserve-perms, важный для серверных каталогов с правами доступа. В 1.4.7 добавлена экспериментальная поддержка arithmetic coding, параметр --nofix, поддержка JFIF Extension markers и улучшения для --size при обработке нескольких файлов.
В 1.5.0 добавлен --workers, который включил параллельную обработку. Это заметно изменило практическое применение Jpegoptim на больших медиатеках: программа стала удобнее для пакетной обработки тысяч изображений. В 1.5.2 появились --files-from и --files-stdin, улучшен отчет по JPEG-маркерам и исправлена работа --dest.
Дальнейшие изменения усиливали стабильность и точность поведения: исправления для stdin/stdout, улучшенная работа с JFIF, сохранение режима progressive/non-progressive по умолчанию, исправления параллельной обработки, новые параметры --keep-jfif, --strip-jfif, --retry, --save-extra и --auto-mode.
История Jpegoptim показывает не резкие изменения интерфейса, а последовательное развитие CLI-инструмента: больше контроля над метаданными, надежнее обработка файлов, лучше интеграция в скрипты, удобнее пакетная работа и точнее поведение с разными типами JPEG.
Ограничения программы
Jpegoptim сильный, но узкий инструмент. Его ограничения нужно понимать до запуска по реальным файлам.
Первое ограничение — только JPEG/JFIF. Программа не работает с PNG, WebP, AVIF, GIF или TIFF. Если нужно оптимизировать все форматы изображений сайта, Jpegoptim будет только частью набора инструментов.
Второе — отсутствие графического интерфейса. Для пакетной обработки это плюс, но для пользователя, который хочет видеть превью и двигать ползунок качества, Jpegoptim неудобен.
Третье — риск перезаписи исходников. По умолчанию программа изменяет входные файлы, если результат оптимизации меньше. Без --dest, резервной копии или --noaction можно необратимо изменить рабочие изображения.
Четвертое — lossy-сжатие необратимо. Если применить --max=70 к оригиналам, вернуть прежнее качество из этих файлов уже нельзя.
Пятое — --size не гарантирует идеального попадания в заданный размер. Это не ошибка пользователя, а особенность работы с JPEG.
Шестое — удаление метаданных может быть вредным. --strip-all полезен для публичных веб-копий, но опасен для архивов, редакционных фотографий, изображений с важным ICC-профилем и снимков, где EXIF нужен для ориентации или учета.
Седьмое — результат lossless-оптимизации зависит от исходника. Некоторые файлы уменьшаются заметно, другие почти не меняются.
Типичные ошибки пользователей
Запуск по оригиналам без копии
jpegoptim --max=75 --strip-all *.jpgТакой запуск сразу меняет исходники. Если это единственные файлы, ошибка критичная: качество снижено, метаданные удалены, восстановить прежнее состояние нельзя.
Правильнее:
mkdir optimizedjpegoptim --max=75 --strip-all --dest=optimized *.jpgОжидание огромной экономии в lossless-режиме
Команда:
jpegoptim image.jpgне обязана уменьшить файл в несколько раз. Если JPEG уже оптимизирован, выигрыш может быть 0–3%. Это нормально. Для сильного сжатия нужен --max или --size, но они могут снижать качество.
Удаление ICC у товарных фото
jpegoptim --strip-all product.jpgНа товарных фото цвет может быть важнее нескольких килобайт. Лучше:
jpegoptim --strip-all --keep-icc product.jpgСлишком низкое качество
jpegoptim --max=60 image.jpgДля фотографии такой уровень может дать заметные артефакты: грязь в тенях, блоки на градиентах, ореолы вокруг контрастных деталей. Лучше тестировать несколько уровней.
Массовая обработка без --noaction
Перед запуском на большой папке стоит выполнить:
jpegoptim --noaction --max=85 --strip-all *.jpgЭто показывает ожидаемый результат без физического изменения файлов.
Путаница между --dest и копированием всех файлов
Если файл не удалось уменьшить, Jpegoptim не обязан создавать его копию в папке --dest. Поэтому каталог результата может содержать не все исходные изображения. Это поведение важно учитывать при сборке готовой папки для публикации.
Сильные стороны
Jpegoptim ценен тем, что делает оптимизацию JPEG простой и управляемой. Он не требует графического интерфейса, не навязывает пресеты, не смешивает десятки форматов в одном окне. Команда явно показывает, что произойдет с файлами.
Сильные стороны:
быстрая обработка JPEG;
lossless-оптимизация по умолчанию;
lossy-сжатие через
--max;целевой размер через
--size;удаление и сохранение конкретных метаданных;
progressive JPEG;
пакетная обработка;
многопоточность через
--workers;CSV-вывод для отчетов;
работа со списками файлов;
stdin/stdoutдля пайплайнов;удобство для серверов и автоматизации;
простая логика команд.
Jpegoptim особенно хорошо смотрится там, где нужно сделать оптимизацию частью процесса: загрузили изображения — обработали — записали лог — отправили дальше.
Слабые стороны
Недостатки вытекают из специализации.
Слабые стороны:
нет графического интерфейса;
только JPEG/JFIF;
нет визуального сравнения до/после;
нет встроенного ресайза;
нет кадрирования и редактирования;
нет работы с PNG/WebP/AVIF;
можно случайно изменить оригиналы;
--strip-allтребует понимания метаданных;--maxтребует визуального контроля качества;для новичка командная строка сложнее обычной программы с кнопками.
Jpegoptim не заменяет Photoshop, GIMP, XnView, ImageMagick или конвертер форматов. Он заменяет ручную техническую оптимизацию JPEG там, где нужно быстро и массово уменьшить вес файлов.
Сравнение с аналогами
| Программа | Основной формат работы | Сильные стороны | Где уступает |
|---|---|---|---|
| jpegtran | CLI | Классические lossless-трансформации JPEG, поворот, оптимизация, работа без пересжатия | Менее удобен как простой пакетный оптимизатор с управлением метаданными и размером |
| MozJPEG | CLI/библиотека | Сильный JPEG-энкодинг, хорош для качественного lossy-сжатия | Требует больше понимания настроек, не такой простой для типовой пакетной обработки |
| ImageOptim | GUI на macOS | Удобное перетаскивание файлов, несколько оптимизаторов, простота для пользователя | Менее удобен для серверной автоматизации и Linux-сценариев |
| FileOptimizer | GUI на Windows | Поддерживает много форматов, удобен как универсальный оптимизатор | Более тяжелый и широкий инструмент, избыточен для чистой JPEG-CLI-задачи |
| Trimage | GUI/CLI | Удобен для Linux-пользователей, работает с несколькими оптимизаторами | Менее гибок в точном управлении параметрами JPEG |
| jpeg-recompress | CLI | Подбирает качество с анализом визуального результата | Обычно работает медленнее и решает другую задачу — поиск компромисса качества |
| ImageMagick | CLI/набор утилит | Универсальная обработка изображений: ресайз, конвертация, эффекты, форматы | Для простой оптимизации JPEG может быть избыточен |
| XnConvert | GUI | Пакетная обработка, ресайз, водяные знаки, конвертация | Не так удобен для серверных скриптов и минималистичной CLI-обработки |
| Squoosh CLI | CLI | Современные кодеки и веб-форматы | Другая экосистема и другой набор задач |
Если нужна именно массовая оптимизация JPEG через командную строку, Jpegoptim проще большинства альтернатив. Если нужна универсальная обработка изображений, лучше подходят ImageMagick, XnConvert или FileOptimizer. Если нужна максимальная настройка JPEG-кодирования, стоит смотреть в сторону MozJPEG. Если нужен простой GUI без терминала, удобнее ImageOptim или FileOptimizer.
Чем Jpegoptim отличается от графических оптимизаторов
Графические оптимизаторы обычно строятся вокруг визуального сценария: выбрать файлы, перетащить в окно, нажать кнопку, получить результат. Такой подход удобен для разовой обработки. Но при регулярной работе с сайтом или каталогом товаров он быстро упирается в ручной труд.
Jpegoptim работает иначе:
jpegoptim --max=85 --strip-all --all-progressive *.jpgОдна команда задает весь процесс. Ее можно повторить, сохранить в скрипт, добавить в cron, вызвать после загрузки файла или встроить в деплой. Это делает результат воспроизводимым: завтра, через месяц и на другом сервере команда сработает так же.
Графический оптимизатор удобнее, когда нужно посмотреть и решить. Jpegoptim удобнее, когда решение уже принято и его нужно применить к сотням файлов.
Чем Jpegoptim отличается от конвертеров
Конвертеры изображений обычно меняют формат: PNG в JPG, JPG в WebP, TIFF в JPEG, BMP в PNG. Jpegoptim не занимается конвертацией между форматами. Он берет JPEG и возвращает JPEG.
Это важное отличие. Если задача — получить WebP или AVIF, нужен другой инструмент. Если задача — уменьшить уже готовый JPEG без изменения формата, Jpegoptim подходит точно.
В рабочем процессе это может выглядеть так:
Редактор готовит изображение.
Конвертер при необходимости переводит его в JPEG.
Jpegoptim оптимизирует финальный JPEG.
Файл отправляется на сайт.
Jpegoptim стоит на последнем техническом этапе, когда картинка уже готова содержательно.
Настройки качества для разных типов изображений
Универсального значения --max нет. Но можно ориентироваться на тип изображения.
| Тип изображения | Рекомендуемый тестовый диапазон | Комментарий |
|---|---|---|
| Фотографии для блога | 80–88 | Обычно хорошо переносят умеренное сжатие |
| Товар на белом фоне | 85–92 | Важны чистые края, тени и цвет |
| Скриншоты интерфейса | 90–95 | Текст и линии плохо переносят сильное JPEG-сжатие |
| Большие фоновые изображения | 75–85 | Часто можно сжать сильнее |
| Фотоархив | lossless или 90+ | Лучше сохранять качество и метаданные |
| Превью/миниатюры | 75–85 | Мелкий размер скрывает часть артефактов |
| Баннеры с текстом | 88–95 | Нужна проверка букв и контрастных границ |
Примеры команд для тестов:
jpegoptim --max=92 --dest=q92 image.jpgjpegoptim --max=88 --dest=q88 image.jpgjpegoptim --max=85 --dest=q85 image.jpgjpegoptim --max=80 --dest=q80 image.jpgПосле теста нужно сравнить не только вес, но и визуальное качество. Особенно важно смотреть:
мелкий текст;
логотипы;
градиенты;
однотонные фоны;
тени;
кожу;
металлические и глянцевые поверхности;
края объектов;
шум в темных областях.
Оптимизация изображений для сайта
Для сайта чаще всего нужны три вещи: уменьшить вес, убрать лишние метаданные и сделать загрузку приятнее. Jpegoptim закрывает все три задачи.
Базовая команда для веб-копий:
jpegoptim --max=85 --strip-all --all-progressive *.jpgБезопасный вариант:
mkdir webjpegoptim --max=85 --strip-all --all-progressive --dest=web *.jpgЕсли важен цвет:
mkdir webjpegoptim --max=85 --strip-all --keep-icc --all-progressive --dest=web *.jpgЕсли нужно сохранить EXIF:
mkdir webjpegoptim --max=85 --strip-all --keep-exif --keep-icc --all-progressive --dest=web *.jpgДля сайта Jpegoptim лучше использовать после ресайза. Если фотография 6000×4000 пикселей, Jpegoptim уменьшит ее вес, но не сделает изображение подходящим по размеру для веб-страницы. Сначала нужно привести ширину и высоту к нужным значениям, затем оптимизировать JPEG. Это не недостаток программы, а правильное разделение задач: ресайз делает другой инструмент, Jpegoptim выполняет финальное сжатие JPEG.
Контроль качества после обработки
После оптимизации нельзя смотреть только на проценты. Строка optimized и экономия 40% не означают автоматически, что изображение подходит для публикации. Нужно проверить визуальный результат.
Минимальная проверка:
Открыть исходник и оптимизированный JPEG рядом.
Увеличить до 100%.
Проверить мелкие детали.
Посмотреть однотонные области.
Проверить цвет.
Сравнить вес файла.
Проверить, не удалены ли нужные метаданные.
Для командной проверки метаданных можно использовать внешние инструменты, но внутри сценария Jpegoptim важно правильно выбрать --strip-* и --keep-*. Если нужна приватность — удаляются EXIF и XMP. Если нужна цветовая точность — сохраняется ICC. Если нужен редакционный архив — лучше сохранять IPTC и XMP.
Рекомендованные рабочие профили
Профиль безопасный старт
mkdir optimizedjpegoptim --noaction *.jpgjpegoptim --dest=optimized *.jpgПодходит для первого теста и lossless-оптимизации.
Профиль веб-копии
mkdir webjpegoptim --max=85 --strip-all --all-progressive --dest=web *.jpgПодходит для обычных изображений сайта, если метаданные не нужны.
Профиль товары с сохранением цвета
mkdir productsjpegoptim --max=88 --strip-all --keep-icc --all-progressive --dest=products *.jpgПодходит для карточек товаров, где цвет важен.
Профиль архив без потерь
mkdir archive-optimizedjpegoptim --keep-all --preserve --dest=archive-optimized *.jpgПодходит для архива, где нельзя удалять метаданные и снижать качество.
Профиль жесткий лимит размера
mkdir limitedjpegoptim --size=250k --strip-all --keep-icc --dest=limited *.jpgПодходит для площадок с ограничением по весу файла.
Профиль серверная папка
find ./uploads -type f ( -iname "*.jpg" -o -iname "*.jpeg" ) -exec jpegoptim --max=85 --strip-all --all-progressive {} ;Подходит для автоматической обработки публичных изображений.
Когда лучше не использовать Jpegoptim
Jpegoptim не нужен, если задача не связана с JPEG-оптимизацией.
Не стоит использовать его, если нужно:
изменить размер изображения;
обрезать фото;
сделать ретушь;
добавить текст;
наложить водяной знак;
конвертировать PNG в JPG;
получить WebP или AVIF;
обработать RAW;
визуально сравнить результат в одном окне;
сохранить все данные без малейшего изменения файла;
работать с изображениями без понимания командной строки.
Также не стоит запускать lossy-команды по единственным оригиналам. Для оригиналов лучше хранить исходные файлы отдельно, а Jpegoptim применять к копиям для публикации.
Кому подойдет Jpegoptim
Jpegoptim хорошо подойдет вебмастерам, разработчикам, администраторам серверов, SEO-специалистам, владельцам сайтов, редакторам больших медиатек и тем, кто регулярно готовит JPEG для публикации.
Для вебмастера это способ быстро уменьшить вес изображений. Для разработчика — CLI-инструмент, который легко встроить в процесс сборки. Для администратора — утилита, которую можно запускать на сервере без GUI. Для интернет-магазина — способ пакетно оптимизировать тысячи карточек товаров. Для фотографа — инструмент для подготовки веб-копий, если оригиналы хранятся отдельно.
Если пользователь работает только с несколькими фотографиями в месяц и не любит терминал, графическая программа будет удобнее. Если изображений много и процесс должен повторяться, Jpegoptim рациональнее.
Итоговая оценка
Jpegoptim — точный инструмент для конкретной задачи: оптимизация и сжатие JPEG/JFIF через командную строку. Он не пытается заменить графический редактор, не работает со всеми форматами и не предлагает визуальный интерфейс. Зато он быстро обрабатывает JPEG, поддерживает lossless-режим, умеет lossy-сжатие через --max, сжатие до целевого размера через --size, очистку метаданных, progressive JPEG, многопоточность, CSV-отчеты, списки файлов и потоковую обработку.
Главная практическая ценность Jpegoptim — массовая и воспроизводимая оптимизация JPEG. Однажды подобранная команда превращается в стабильный рабочий профиль для сайта, интернет-магазина, архива или серверной папки. Главное — использовать программу осознанно: сначала --noaction, затем --dest, тест качества на реальных изображениях, аккуратная работа с --strip-all и сохранение оригиналов там, где они важны.
Jpegoptim стоит выбирать, когда нужна не красивая программа для картинок, а надежная CLI-утилита для уменьшения веса JPEG-файлов и автоматизации обработки изображений.
