Jpegoptim: консольная утилита для оптимизации и сжатия JPEG-файлов

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

Скачать Jpegoptim

Бесплатно
В реестре программного обеспечения РФ
Чистая установка

Новейшая версия для Windows и macOS. Удобный редактор с ИИ и профессиональными функциями.

⬇ Скачать ФотоМАСТЕР бесплатно

⬇ Скачать Jpegoptim (Windows)

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

Jpegoptim в терминале: справка по командам и параметрам

Для пользователя, который привык к интерфейсу с кнопками Открыть, Сохранить, Экспорт и Настройки, 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

На скриншоте видно типичное поведение программы: пользователь запускает 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

На этом примере 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.jpg

EXIF может содержать модель камеры, параметры съемки, дату, ориентацию, иногда координаты. Для публичной публикации удаление EXIF часто оправдано. Но если система использует EXIF-ориентацию или важны данные съемки, удалять этот блок не стоит без проверки.

Удаление ICC-профиля

jpegoptim --strip-icc photo.jpg

ICC-профиль влияет на интерпретацию цвета. Удаление ICC может уменьшить файл, но иногда приводит к изменению цветопередачи в программах и браузерах, особенно если изображение не в стандартном sRGB-представлении. Для фотографий товаров, где важен цвет, --strip-icc нужно тестировать отдельно.

Удаление комментариев

jpegoptim --strip-com image.jpg

COM-маркеры содержат комментарии внутри JPEG. Обычно они не нужны для веб-публикации.

Удаление XMP

jpegoptim --strip-xmp image.jpg

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

Удаление IPTC

jpegoptim --strip-iptc image.jpg

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

Сохранение нужных маркеров

Иногда нужно удалить почти все, но оставить конкретные блоки:

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 в Linux Mint: справка и список параметров в терминале

Этот скриншот хорошо показывает, что 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.csv

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

Работа через 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 там, где нужно быстро и массово уменьшить вес файлов.

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

ПрограммаОсновной формат работыСильные стороныГде уступает
jpegtranCLIКлассические lossless-трансформации JPEG, поворот, оптимизация, работа без пересжатияМенее удобен как простой пакетный оптимизатор с управлением метаданными и размером
MozJPEGCLI/библиотекаСильный JPEG-энкодинг, хорош для качественного lossy-сжатияТребует больше понимания настроек, не такой простой для типовой пакетной обработки
ImageOptimGUI на macOSУдобное перетаскивание файлов, несколько оптимизаторов, простота для пользователяМенее удобен для серверной автоматизации и Linux-сценариев
FileOptimizerGUI на WindowsПоддерживает много форматов, удобен как универсальный оптимизаторБолее тяжелый и широкий инструмент, избыточен для чистой JPEG-CLI-задачи
TrimageGUI/CLIУдобен для Linux-пользователей, работает с несколькими оптимизаторамиМенее гибок в точном управлении параметрами JPEG
jpeg-recompressCLIПодбирает качество с анализом визуального результатаОбычно работает медленнее и решает другую задачу — поиск компромисса качества
ImageMagickCLI/набор утилитУниверсальная обработка изображений: ресайз, конвертация, эффекты, форматыДля простой оптимизации JPEG может быть избыточен
XnConvertGUIПакетная обработка, ресайз, водяные знаки, конвертацияНе так удобен для серверных скриптов и минималистичной CLI-обработки
Squoosh CLICLIСовременные кодеки и веб-форматыДругая экосистема и другой набор задач

Если нужна именно массовая оптимизация 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 подходит точно.

В рабочем процессе это может выглядеть так:

  1. Редактор готовит изображение.

  2. Конвертер при необходимости переводит его в JPEG.

  3. Jpegoptim оптимизирует финальный JPEG.

  4. Файл отправляется на сайт.

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% не означают автоматически, что изображение подходит для публикации. Нужно проверить визуальный результат.

Минимальная проверка:

  1. Открыть исходник и оптимизированный JPEG рядом.

  2. Увеличить до 100%.

  3. Проверить мелкие детали.

  4. Посмотреть однотонные области.

  5. Проверить цвет.

  6. Сравнить вес файла.

  7. Проверить, не удалены ли нужные метаданные.

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


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