Zopflipng: программа для оптимизации PNG
ZopfliPNG, который в терминале запускается командой zopflipng, — это узкоспециализированная программа для оптимизации PNG-файлов. Она не редактирует изображение как графический редактор, не рисует, не кадрирует и не накладывает фильтры. Ее задача значительно уже и практичнее: взять готовый PNG, подобрать для него более выгодное внутреннее представление и пересжать данные так, чтобы файл занимал меньше места при сохранении совместимости с обычными просмотрщиками, браузерами, движками игр и интерфейсными библиотеками.
Скачать Zopflipng
Для сжатия и оптимизации файлов
⬇ Скачать ФотоМАСТЕР бесплатно
⬇ Скачать Zopflipng бесплатно
Главная особенность ZopfliPNG — ориентация не на скорость, а на плотность сжатия. Утилита использует алгоритм Zopfli для Deflate-сжатия, перебирает стратегии PNG-фильтрации, может менять цветовой тип там, где это не меняет видимое изображение, и удаляет необязательные chunks, которые обычно не нужны для веб-публикации. Поэтому zopflipng особенно полезен на финальном этапе подготовки PNG-графики: когда сайт уже собран, иконки экспортированы, скриншоты документации готовы, а набор ассетов для приложения или игры больше не меняется каждые пять минут.
Это не программа для пользователя, который ждет окно с кнопками Open, Preview, Compress и Save. ZopfliPNG работает через командную строку. Его интерфейс — это команда, параметры, входной PNG-файл, выходной PNG-файл и текстовый вывод в терминале. Зато такой формат дает точный контроль: можно явно указать режим сжатия, сохранить нужные chunks, запустить пакетную обработку, встроить оптимизацию PNG в скрипт, CI/CD или локальный build-процесс.

Содержание
- 1 Что такое ZopfliPNG и почему команда называется zopflipng
- 2 Основные возможности ZopfliPNG
- 3 Интерфейс программы: что пользователь видит в ZopfliPNG
- 4 Установка ZopfliPNG
- 5 Первый запуск и базовая команда
- 6 Практический сценарий: оптимизация одного PNG-файла
- 7 Усиленное сжатие через -m
- 8 Управление количеством итераций через --iterations
- 9 Выбор PNG-фильтров через --filters
- 10 Работа с прозрачностью через --lossy_transparent
- 11 Преобразование 16-битных PNG через --lossy_8bit
- 12 Сохранение metadata chunks через --keepchunks
- 13 Сохранение цветового типа через --keepcolortype
- 14 Пакетная обработка PNG через --prefix
- 15 Режим dry run через -d
- 16 Быстрый режим -q
- 17 Поведение при существующем выходном файле и параметр -y
- 18 --always_zopflify для бенчмарков
- 19 Реальные задачи, которые можно сделать в ZopfliPNG
- 20 Интеграция ZopfliPNG в рабочий процесс веб-разработчика
- 21 Интеграция в npm-скрипты и build-пайплайн
- 22 Качество сжатия и скорость
- 23 Ограничения ZopfliPNG
- 24 Безопасность и сохранность данных
- 25 Сравнение с аналогами
- 26 Таблица параметров ZopfliPNG
- 27 Примеры команд для разных случаев
- 27.1 Обычная оптимизация одного файла
- 27.2 Более плотное сжатие
- 27.3 Оптимизация прозрачной иконки
- 27.4 Сохранение gamma и DPI
- 27.5 Сохранение ICC-профиля
- 27.6 Пакетная обработка в текущей папке
- 27.7 Пакетная обработка в отдельную папку
- 27.8 Агрессивный тест фильтров и итераций
- 27.9 Dry run для проверки
- 27.10 Быстрый тест
- 28 Типичные ошибки пользователей
- 29 Практические профили настроек
- 30 Для кого ZopfliPNG подходит лучше всего
- 31 Кому лучше выбрать другую программу
- 32 Итоговая оценка
Что такое ZopfliPNG и почему команда называется zopflipng
Название может сбивать с толку: в пакетах и документации встречаются Zopfli, ZopfliPNG и zopflipng. Это связанные, но не полностью одинаковые понятия.
Zopfli — это алгоритм и библиотека для более плотного Deflate-, gzip- и zlib-сжатия. PNG как формат использует Deflate внутри IDAT-данных, поэтому алгоритм Zopfli хорошо подходит для дополнительной оптимизации PNG без смены формата. ZopfliPNG — PNG-часть этого проекта, то есть оптимизатор Portable Network Graphics. zopflipng — конкретный исполняемый файл и команда, которую пользователь вводит в терминале.
В реальной работе пользователь почти всегда взаимодействует именно с zopflipng. Команда выглядит так:
zopflipng [options]... infile.png outfile.png
Есть и второй режим запуска, рассчитанный на обработку нескольких файлов:
zopflipng [options]... --prefix=[fileprefix] [files.png]...
Первый вариант нужен, когда оптимизируется один файл и явно задается имя результата. Второй вариант удобен для папки с несколькими PNG: программа добавляет префикс к выходным файлам и не требует вручную прописывать имя для каждого результата.
ZopfliPNG не меняет формат на WebP, AVIF или JPEG XL. На выходе остается PNG. Это важный плюс для проектов, где формат уже задан: например, для прозрачных интерфейсных элементов, старых шаблонов сайта, движка, который ожидает PNG, или набора изображений, который должен открываться в любом стандартном просмотрщике без дополнительных кодеков.
Основные возможности ZopfliPNG
ZopfliPNG выполняет несколько задач, которые вместе дают уменьшение размера PNG-файла. Он не просто архивирует картинку сильнее, а работает с особенностями самого PNG: фильтрами строк, цветовым типом, IDAT-сжатием, прозрачностью и служебными chunks.
Ключевые возможности программы:
-
сжатие PNG без смены формата;
-
Deflate-сжатие через Zopfli;
-
подбор стратегий scanline filter codes;
-
выбор более подходящего цветового типа для lossless-кодирования;
-
удаление необязательных metadata chunks;
-
сохранение отдельных chunks через
--keepchunks; -
обработка полностью прозрачных пикселей через
--lossy_transparent; -
перевод 16-битных каналов в 8-битные через
--lossy_8bit; -
быстрый тестовый режим через
-q; -
более плотная оптимизация через
-m; -
ручная настройка числа итераций через
--iterations; -
ручной перебор PNG-фильтров через
--filters; -
пакетная оптимизация через
--prefix; -
dry run без записи результата через
-d; -
автоматическая защита от замены уже существующего меньшего файла более крупным результатом.
На практике эти функции нужны не сами по себе, а в конкретных сценариях. Например, веб-разработчик может прогнать через zopflipng набор PNG-иконок перед релизом сайта. Автор документации может уменьшить вес скриншотов, не превращая их в JPEG и не теряя резкость текста. Разработчик игры может оптимизировать PNG-ассеты, оставив совместимость с игровым движком. Дизайнер интерфейса может подготовить прозрачные элементы так, чтобы они занимали меньше места в приложении.
ZopfliPNG особенно хорошо смотрится там, где PNG уже выбран как финальный формат. Если проект допускает переход на WebP или AVIF, выигрыш может быть больше за счет смены кодека. Но если нужен именно PNG, zopflipng остается одним из наиболее интересных инструментов для финального сжатия.
Интерфейс программы: что пользователь видит в ZopfliPNG
У ZopfliPNG нет графического окна, боковой панели, области предпросмотра и кнопки Оптимизировать. Его интерфейс — командная строка. Это не недостаток, а часть назначения программы. zopflipng рассчитан на разработчиков, технических пользователей и автоматизацию, где важнее воспроизводимый результат, чем визуальное управление мышью.
Основные элементы интерфейса ZopfliPNG:
| Элемент | Что означает |
|---|---|
zopflipng |
имя команды, запускающей программу |
[options]... |
параметры оптимизации: -m, -q, --iterations, --filters и другие |
infile.png |
исходный PNG-файл |
outfile.png |
файл, в который будет записан результат |
--prefix=[fileprefix] |
режим пакетной обработки с автоматическим созданием имен |
| консольный вывод | сообщения о размере, результате и ходе обработки |
| код возврата | технический результат выполнения команды для скриптов |
Для пользователя это выглядит как обычная работа с терминальной утилитой. Вы вводите команду, программа читает PNG, выводит информацию об обработке и сохраняет новый файл. Если результат меньше исходника, его удобно использовать вместо прежней версии. Если файл уже был хорошо оптимизирован, выигрыш может быть небольшим или отсутствовать.
В выводе ZopfliPNG обычно важны строки с размером исходного файла, размером результата и процентом от оригинала. Эти строки быстро показывают, дала ли оптимизация смысл. Например, если результат составляет 85% от исходника, значит файл уменьшился примерно на 15%. Если результат почти равен исходнику, этот конкретный PNG уже был хорошо подготовлен, либо его структура не дает большого пространства для Deflate-оптимизации.
Установка ZopfliPNG
ZopfliPNG распространяется как часть проекта Zopfli. В разных системах пакет может называться zopfli, а команда после установки все равно будет zopflipng. Это нормальная ситуация: пакет содержит несколько инструментов, а PNG-оптимизатор запускается отдельным исполняемым файлом.
Установка в Linux
В Linux самый удобный вариант — установить пакет через менеджер пакетов дистрибутива. В Debian и Ubuntu используется пакет zopfli:
sudo apt install zopfli
После установки нужно проверить, что команда доступна:
zopflipng
или:
zopflipng --help
Если команда найдена, в терминале появится справка ZopfliPNG с синтаксисом запуска и списком параметров. Если терминал пишет command not found, пакет не установлен, установлен не в тот путь или текущая shell-сессия не видит каталог с исполняемым файлом.
На Fedora, openSUSE, Arch Linux и других системах название пакета обычно тоже привязано к Zopfli. Команда после установки остается той же: zopflipng.
Установка в macOS
На macOS ZopfliPNG чаще всего устанавливают через Homebrew:
brew install zopfli
После этого можно проверить команду:
which zopflipng
и запустить справку:
zopflipng
Если используется MacPorts, установка выполняется так:
sudo port install zopfli
Для macOS важно учитывать путь к исполняемым файлам. На Intel Mac Homebrew обычно использует /usr/local/bin, на Apple Silicon — /opt/homebrew/bin. Если zopflipng установлен, но не запускается из терминала, нужно проверить переменную PATH.
Установка в Windows
В Windows ZopfliPNG чаще используют в одном из трех вариантов:
-
готовый исполняемый файл
zopflipng.exeиз доверенной сборки; -
сборка из исходников;
-
запуск через WSL, если уже настроена Linux-среда внутри Windows.
Для технического пользователя наиболее предсказуемый вариант — WSL: устанавливается Linux-дистрибутив, затем пакет zopfli, после чего команда zopflipng работает так же, как в обычном Linux. Если нужен именно .exe, его следует хранить в отдельной папке, например C:Toolszopfli, и добавить эту папку в PATH.
Проверка в PowerShell или Command Prompt выглядит так:
zopflipng.exe
Если команда выводит справку, программа установлена корректно.
Для Windows также встречаются отдельные графические оболочки, которые запускают zopflipng.exe внутри себя. Такой вариант не меняет суть программы: оптимизацию все равно выполняет ZopfliPNG, а оболочка только упрощает выбор файлов и пакетный запуск.
Первый запуск и базовая команда
Самая простая команда ZopfliPNG состоит из имени программы, исходного файла и выходного файла:
zopflipng input.png output.png
input.png — исходное изображение. output.png — новый оптимизированный файл. ZopfliPNG не должен использоваться как единственное хранилище оригинала: сначала лучше сохранять результат под новым именем, сравнивать размер и визуально проверять файл.
Типичный порядок действий:
-
Подготовить PNG в графическом редакторе или получить его из скриншота.
-
Открыть терминал в папке с файлом.
-
Выполнить команду
zopflipng input.png output.png. -
Сравнить размер
input.pngиoutput.png. -
Открыть оба файла в просмотрщике.
-
Заменить исходник оптимизированной версией только после проверки.
Пример:
zopflipng screenshot.png screenshot-optimized.png
Такой запуск использует стандартные настройки. Он уже включает полезные действия: программа пробует подходящую стратегию фильтрации, применяет Zopfli-сжатие и создает PNG, совместимый с обычными программами просмотра.
Базовый режим подходит для первого теста. Он не самый быстрый из возможных, но и не такой тяжелый, как агрессивные настройки с большим количеством итераций. С него удобно начинать, чтобы понять, насколько конкретные PNG в проекте вообще поддаются оптимизации.
Практический сценарий: оптимизация одного PNG-файла
Рассмотрим обычную ситуацию: есть файл logo.png, экспортированный из графического редактора. Его нужно уменьшить без перевода в JPEG, потому что у логотипа прозрачный фон и четкие края. Для такого файла PNG подходит лучше, чем JPEG, а ZopfliPNG можно использовать как финальный оптимизатор.
Команда:
zopflipng logo.png logo.min.png
После выполнения нужно посмотреть на размер:
ls -lh logo.png logo.min.png
Если результат меньше, файл logo.min.png можно использовать в проекте. Если результат почти не отличается, значит исходный PNG уже был неплохо подготовлен или структура изображения не дает большой экономии. Это нормальная ситуация: PNG-оптимизация зависит от содержимого. Скриншоты интерфейса, плоские иллюстрации, иконки, изображения с ограниченной палитрой и большие области однотонного цвета часто дают хороший результат. Фотографические PNG могут сжиматься хуже, потому что случайные мелкие детали не так хорошо поддаются Deflate.
Для проверки визуальной идентичности можно открыть оба файла в просмотрщике изображений, браузере или редакторе. В базовом режиме ZopfliPNG рассчитан на lossless-оптимизацию видимого PNG, но программа может удалять служебные chunks, поэтому для проектов с важной цветовой информацией, gamma/DPI или текстовыми метаданными нужно отдельно подумать о --keepchunks.
Практический принцип простой: исходные мастер-файлы лучше хранить отдельно, а zopflipng применять к копиям, которые идут в публикацию, сборку сайта, приложение или архив релиза.

Усиленное сжатие через -m
Параметр -m включает более интенсивную оптимизацию:
zopflipng -m input.png output.png
Этот режим нужен, когда важен каждый килобайт, а время обработки не критично. Например, если вы готовите финальный набор PNG для сайта, мобильного приложения или игры, нет смысла экономить секунды на сжатии, если один раз потраченное время уменьшит вес файлов для тысяч пользователей.
-m особенно уместен для:
-
PNG-иконок интерфейса;
-
логотипов с прозрачностью;
-
декоративных элементов сайта;
-
спрайтов;
-
скриншотов документации;
-
файлов, которые будут лежать в публичной папке проекта;
-
ассетов, которые попадают в релизную сборку.
Для черновой работы -m не всегда удобен. Если дизайнер или разработчик постоянно экспортирует PNG и проверяет результат, медленный режим будет мешать. Здесь лучше сначала использовать обычный запуск или -q, а -m оставить для финального прогона.
Пример рабочего сценария:
zopflipng -m icon-settings.png icon-settings.optimized.png
Здесь программа делает более тщательную попытку уменьшить файл. Выходной PNG остается обычным PNG, но времени на обработку уходит больше.
Управление количеством итераций через --iterations
Параметр --iterations задает число итераций Zopfli-сжатия:
zopflipng --iterations=50 input.png output.png
Чем больше итераций, тем дольше работает программа. Выигрыш при этом не растет линейно. Первые итерации дают основную часть результата, а последующие часто добавляют небольшие улучшения. Поэтому нет смысла бездумно ставить очень большие значения для всех файлов подряд.
Пример умеренного усиления:
zopflipng --iterations=50 screenshot.png screenshot.zopfli.png
Пример тяжелого теста:
zopflipng --iterations=500 screenshot.png screenshot.zopfli.png
Большие значения подходят для экспериментов с отдельными важными PNG. Например, если у сайта есть крупная hero-графика в PNG, набор иконок в шапке или файл, который загружается на каждой странице, можно проверить несколько вариантов и выбрать лучший. Но для папки из тысячи изображений --iterations=500 может быть чрезмерным: обработка займет много времени, а итоговая экономия по сравнению с -m или умеренным --iterations может оказаться небольшой.
Правильный подход — сравнивать на реальных файлах проекта:
zopflipng input.png out-default.pngzopflipng -m input.png out-m.pngzopflipng --iterations=50 input.png out-50.pngzopflipng --iterations=500 input.png out-500.pngls -lh input.png out-default.png out-m.png out-50.png out-500.png
Так сразу видно, какой режим дает разумный баланс между временем и размером.
Выбор PNG-фильтров через --filters
PNG хранит изображение построчно. Перед Deflate-сжатием строки могут проходить через фильтры, которые делают данные более удобными для сжатия. ZopfliPNG умеет пробовать разные стратегии выбора фильтров, а параметр --filters позволяет указать их явно.
Пример:
zopflipng --filters=0me input.png output.png
Здесь программа пробует набор стратегий и оставляет лучший результат. Значения параметра читаются как набор символов:
| Значение | Что означает |
|---|---|
0 |
использовать PNG-фильтр типа 0 |
1 |
использовать PNG-фильтр типа 1 |
2 |
использовать PNG-фильтр типа 2 |
3 |
использовать PNG-фильтр типа 3 |
4 |
использовать PNG-фильтр типа 4 |
m |
minimum sum |
e |
entropy |
p |
predefined, то есть сохранить фильтры из входного файла |
b |
brute force, экспериментальный перебор |
Для практической работы часто используют --filters=0me как разумный набор. Более агрессивный вариант выглядит так:
zopflipng --iterations=500 --filters=01234mepb input.png output.png
Эта команда пробует много стратегий и требует больше времени. Ее стоит применять не ко всем PNG подряд, а к тем файлам, где действительно важен минимальный размер. Например, к набору часто загружаемых иконок, прозрачным элементам интерфейса, скриншотам в документации с большим количеством однотонных областей.
--filters полезен еще и для диагностики. Если обычный запуск дал слабый результат, можно проверить, не поможет ли более широкий перебор фильтров. Иногда конкретное изображение сильно зависит от выбранной стратегии фильтрации, и ручной перебор дает дополнительную экономию.
Работа с прозрачностью через --lossy_transparent
Параметр --lossy_transparent — один из самых практичных в ZopfliPNG, но его нужно понимать правильно:
zopflipng --lossy_transparent input.png output.png
Он изменяет скрытые цвета за полностью прозрачными пикселями, то есть за пикселями с alpha channel 0. В обычном просмотре такие пиксели не видны: если альфа равна нулю, RGB-значения под ней не отображаются. Поэтому для типичных веб-иконок и интерфейсных PNG визуальной разницы нет, а файл может сжаться лучше.
Этот режим хорошо подходит для:
-
прозрачных PNG-иконок;
-
UI-элементов;
-
декоративных PNG;
-
скриншотов с прозрачной подложкой;
-
игровых ассетов, где скрытые RGB-данные под нулевой альфой не используются;
-
веб-графики, где важен только итоговый вид в браузере.
Но --lossy_transparent все же называется lossy не случайно. Он меняет данные в файле, даже если обычный зритель этого не видит. Иногда скрытые цвета под прозрачностью нужны для последующей обработки: например, при нестандартном ресемплинге, генерации mipmaps, некоторых игровых пайплайнах или профессиональных графических процессах. Если такой риск есть, нужно сохранять исходник отдельно и проверять результат в целевой среде.
Практический пример для веб-иконки:
zopflipng -m --lossy_transparent icon-close.png icon-close.min.png
Такой профиль часто удачен для прозрачной графики: -m усиливает сжатие, а --lossy_transparent убирает лишнюю скрытую информацию, которая не влияет на отображение.
Преобразование 16-битных PNG через --lossy_8bit
Параметр --lossy_8bit переводит 16-битное изображение в 8-битное:
zopflipng --lossy_8bit input-16bit.png output-8bit.png
Это уже не просто оптимизация служебной структуры. Если исходный PNG хранит 16 бит на канал, а результат получает 8 бит на канал, часть точности теряется. Для обычной веб-графики это часто приемлемо: большинство интерфейсных PNG, иконок, скриншотов и иллюстраций не нуждаются в 16-битной глубине. Но для научных, медицинских, полиграфических, технических, HDR- и архивных материалов такой параметр нельзя использовать автоматически.
Хороший сценарий для --lossy_8bit:
zopflipng -m --lossy_8bit exported-banner-16bit.png banner-web.png
Плохой сценарий — применять его ко всем файлам без понимания источника. Если PNG был 16-битным не случайно, лучше не снижать глубину цвета. Особенно это касается изображений, где важны плавные градиенты, последующая цветокоррекция или точные числовые значения каналов.
В веб-пайплайне этот параметр можно использовать после проверки. Например, если редактор экспортировал 16-битный PNG по умолчанию, а изображение предназначено только для сайта, перевод в 8 бит может быть логичным. Но для мастер-файлов лучше хранить исходную версию отдельно.
Сохранение metadata chunks через --keepchunks
PNG состоит из chunks. Часть из них критически важна для изображения: без них файл не будет нормальным PNG. Часть содержит дополнительные сведения: gamma, DPI, текстовые комментарии, цветовые профили и другие metadata. ZopfliPNG по умолчанию удаляет необязательные chunks, потому что для типичного веб-использования они часто не нужны и увеличивают размер файла.
Но иногда метаданные важны. Для таких случаев есть параметр --keepchunks:
zopflipng --keepchunks=gAMA,pHYs input.png output.png
В этом примере сохраняются chunks gAMA и pHYs: информация о гамме и физических размерах/плотности. Можно сохранять и другие chunks, если они нужны в конкретном процессе:
zopflipng --keepchunks=iCCP,gAMA,pHYs input.png output.png
Типичные chunks, о которых стоит знать:
| Chunk | Что может содержать | Когда сохранять |
|---|---|---|
gAMA |
gamma-информацию | если важна предсказуемая яркость |
pHYs |
плотность пикселей / DPI | если файл используется не только в вебе |
iCCP |
ICC-профиль | если важен цветовой профиль |
tEXt |
текстовые метаданные | если нужны комментарии или служебные поля |
zTXt |
сжатые текстовые метаданные | если текстовые данные должны остаться |
iTXt |
международные текстовые метаданные | если нужны Unicode-метаданные |
Для веб-иконок и декоративных элементов чаще всего можно не сохранять метаданные. Для документации, дизайна, архивов, печати и контролируемой цветопередачи нужно быть осторожнее.
Команда для сохранения профиля и гаммы:
zopflipng -m --keepchunks=iCCP,gAMA input.png output.png
Команда для сохранения gamma и DPI:
zopflipng -m --keepchunks=gAMA,pHYs input.png output.png
Важно понимать компромисс: каждый сохраненный chunk может увеличить итоговый размер. Поэтому --keepchunks — не параметр на всякий случай, а точный инструмент для тех данных, которые действительно нужны.
Сохранение цветового типа через --keepcolortype
ZopfliPNG умеет выбирать подходящий color type и bit depth, чтобы lossless-кодирование было компактнее. Например, если изображение фактически может быть представлено проще, программа может использовать это для уменьшения файла. Но иногда исходный color type нужно сохранить: RGB, RGBA, grayscale, grayscale+alpha или palette.
Для этого используется параметр:
zopflipng --keepcolortype input.png output.png
Он нужен в ситуациях, где целевое устройство, движок или пайплайн ожидает конкретный тип PNG. Например, внутренний инструмент проекта может быть рассчитан только на RGBA, хотя конкретная картинка могла бы быть представлена как gray+alpha. В обычном вебе это редко требуется, но в старых приложениях, игровых движках, embedded-устройствах и нестандартных системах такая совместимость может быть важнее нескольких процентов экономии.
Минус --keepcolortype очевиден: программа теряет часть возможностей оптимизации. Если ZopfliPNG не может выбрать более компактный тип, итоговый файл может быть крупнее, чем без этого параметра.
Практический пример:
zopflipng -m --keepcolortype ui-panel.png ui-panel.min.png
Такой вариант уместен, если важно сохранить исходный color type и при этом получить более плотное Deflate-сжатие.
Пакетная обработка PNG через --prefix
--prefix — один из самых удобных параметров ZopfliPNG. Он позволяет оптимизировать несколько PNG сразу и автоматически создавать имена выходных файлов.
Пример:
zopflipng --prefix=optimized_ icon1.png icon2.png banner.png
Результат:
-
optimized_icon1.png; -
optimized_icon2.png; -
optimized_banner.png.
Если указать --prefix без значения, используется стандартный префикс zopfli_:
zopflipng --prefix icon1.png icon2.png banner.png
Пакетная обработка особенно полезна с wildcard:
zopflipng --prefix=optimized_ *.png
Так можно быстро обработать все PNG в папке. При этом исходные файлы остаются на месте, а оптимизированные версии получают префикс. Это безопаснее, чем сразу перезаписывать оригиналы.
Для отдельной выходной папки можно использовать путь в префиксе:
mkdir -p optimizedzopflipng --prefix=optimized/ *.png
В таком варианте результаты попадут в папку optimized. Это удобно для сравнения и последующей проверки.
ZopfliPNG также учитывает файлы, которые уже содержат заданный префикс: они воспринимаются как результат предыдущего запуска и не обрабатываются повторно. Это полезно, если команда запускается несколько раз в одной папке.
Хороший рабочий сценарий:
mkdir -p zopfli-outzopflipng -m --prefix=zopfli-out/ *.png
После этого можно сравнить размеры:
du -sh *.pngdu -sh zopfli-out/*.png
И только после проверки заменить файлы в проекте.
Режим dry run через -d
Параметр -d запускает dry run:
zopflipng -d input.png output.png
В этом режиме ZopfliPNG показывает консольный вывод, но не сохраняет файлы. Он полезен для тестов и бенчмарков, когда нужно посмотреть поведение программы, не меняя содержимое папки.
Сценарии применения -d:
-
сравнить время работы разных параметров;
-
проверить, как программа анализирует файл;
-
использовать вывод в тестовом скрипте;
-
оценить потенциальный результат без записи;
-
не засорять папку промежуточными файлами.
Например:
time zopflipng -d -m screenshot.png screenshot.out.png
Так можно оценить, насколько тяжелым будет режим -m для конкретного файла. Если один PNG обрабатывается долго, то пакет из сотен таких файлов лучше запускать ночью, на отдельной машине или только для измененных изображений.
-d удобен и в документации по внутреннему процессу: можно показать, какие параметры используются, не создавая лишние файлы в репозитории.
Быстрый режим -q
Параметр -q включает быстрый, но не лучший по качеству сжатия режим:
zopflipng -q input.png output.png
Он нужен не для финального результата, а для быстрой проверки PNG-фильтров и цветовых типов. Если требуется быстро понять, как программа работает с конкретным файлом, -q экономит время.
Разница между режимами:
| Режим | Назначение |
|---|---|
-q |
быстрый тест, предварительная проверка |
| обычный запуск | базовая оптимизация |
-m |
более плотное сжатие |
--iterations=500 --filters=01234mepb |
тяжелый экспериментальный прогон |
Пример:
zopflipng -q draft.png draft.quick.png
После этого можно перейти к более качественному режиму:
zopflipng -m draft.png draft.final.png
Для автоматизации -q подходит на промежуточных этапах, когда изображения часто меняются. Финальная сборка должна использовать обычный или усиленный профиль.
Поведение при существующем выходном файле и параметр -y
ZopfliPNG аккуратно работает с уже существующими выходными файлами. Если файл результата уже есть и его размер меньше, программа рассматривает его как результат предыдущего запуска и не перезаписывает более крупной версией. Это защищает от ситуации, когда повторная обработка с другими параметрами случайно ухудшила размер.
Параметр -y отключает запросы о перезаписи:
zopflipng -y input.png output.png
Он нужен в скриптах, где интерактивный вопрос остановил бы выполнение. Например:
zopflipng -m -y input.png output.png
Для ручной работы -y не всегда нужен. Иногда полезно оставить запрос, чтобы случайно не заменить файл. Для автоматической сборки, CI или batch-обработки -y удобнее, потому что команда не требует участия пользователя.
Пример с пакетной обработкой:
zopflipng -m -y --prefix=optimized_ *.png
Такой запуск подходит для повторного прогона папки с PNG: программа обработает файлы по заданному правилу, не задавая лишних вопросов.
--always_zopflify для бенчмарков
Параметр --always_zopflify заставляет программу выводить PNG, закодированный Zopfli, даже если результат получается больше оригинала:
zopflipng --always_zopflify input.png output.png
Для обычной оптимизации этот режим не нужен. Его смысл — тестирование и сравнение алгоритма. В реальном проекте увеличивать PNG ради формального применения Zopfli бессмысленно. Если цель — уменьшение размера, нужно использовать стандартное поведение: оставлять результат только тогда, когда он выгоднее.
--always_zopflify полезен, когда тестируется сам алгоритм, сравниваются Deflate-реализации или нужно получить результат независимо от размера. Для веб-разработчика, дизайнера или автора документации этот параметр почти всегда лишний.
Реальные задачи, которые можно сделать в ZopfliPNG
ZopfliPNG решает конкретные прикладные задачи. Он не заменяет Photoshop, GIMP, Photopea, Krita или Paint.NET, но хорошо дополняет их на финальном этапе. Сначала изображение создается или редактируется в графической программе, затем экспортируется в PNG, и только после этого запускается zopflipng.
Типичные задачи:
| Задача | Как помогает ZopfliPNG |
|---|---|
| Уменьшить вес PNG-иконок | пересжимает IDAT-данные и удаляет лишние chunks |
| Подготовить изображения для сайта | снижает вес без смены формата |
| Оптимизировать скриншоты документации | сохраняет четкость текста и интерфейса |
| Сжать ассеты игры | оставляет PNG-совместимость для движка |
| Подготовить UI-графику приложения | уменьшает размер прозрачных элементов |
| Проверить, насколько PNG уже оптимизирован | сравнение исходного и выходного файла показывает потенциал |
| Удалить лишние метаданные | по умолчанию убирает chunks, не нужные для типичного веб-использования |
| Сохранить важные chunks | --keepchunks оставляет gamma, DPI, ICC и другие данные |
| Встроить PNG-оптимизацию в build | CLI-формат удобно запускать из shell-скриптов |
Особенно заметна польза там, где много маленьких файлов. Отдельная иконка может уменьшиться всего на несколько сотен байт, но набор из сотен иконок, спрайтов и элементов интерфейса уже дает ощутимое снижение общего веса. Для сайта это может означать меньше передаваемых данных, быстрее загрузку и аккуратнее подготовленные assets.
Интеграция ZopfliPNG в рабочий процесс веб-разработчика
ZopfliPNG хорошо вписывается в пайплайн подготовки статических файлов. Например, проект собирает фронтенд в папку public, а PNG лежат в public/images. Самый простой вариант — обработать файлы после сборки в отдельную папку:
mkdir -p public/images-optimizedzopflipng -m --prefix=public/images-optimized/ public/images/*.png
Но этот вариант сохраняет только файлы из одной папки и не обходит подпапки. Для рекурсивной обработки можно использовать find. Безопасный подход — сначала создавать временный файл, а потом заменять исходник только при успешной обработке.
Пример скрипта:
#!/usr/bin/env shset -efor file in "$@"; do tmp="${file}.zopfli.tmp.png" zopflipng -m -y "$file" "$tmp" if [ -f "$tmp" ]; then mv "$tmp" "$file" fidone
Запуск:
find public/images -name "*.png" -print0 | xargs -0 ./optimize-png.sh
Такой подход удобен, но перед использованием в рабочем проекте его нужно проверить на копии. Причина простая: команда заменяет исходные файлы. Если в проекте важно хранить оригинальные exports, оптимизированные PNG лучше писать в отдельную папку.
Более осторожный вариант:
mkdir -p public/images-zopflifind public/images -name "*.png" -exec zopflipng -m --prefix=public/images-zopfli/ {} ;
В реальных проектах часто оптимизируют только измененные изображения. Это экономит время, потому что zopflipng может быть медленным. Например, можно запускать его только для PNG, измененных в текущем коммите, или только перед релизной сборкой.
Интеграция в npm-скрипты и build-пайплайн
Хотя ZopfliPNG не является JavaScript-программой, его можно запускать из npm-скриптов как обычную системную команду. Это удобно для фронтенд-проектов, где сборка уже управляется через package.json.
Пример:
{ "scripts": { "optimize:png": "zopflipng -m --prefix=optimized_ assets/*.png" }}
Запуск:
npm run optimize:png
Такой способ подходит для локальной оптимизации assets. Для полноценного production-пайплайна лучше продумать структуру папок: исходные изображения хранить в assets/source, оптимизированные — в assets/dist или в папке итоговой сборки.
Пример более аккуратной структуры:
assets/ source/ logo.png icons.png optimized/ logo.png icons.png
Команда:
mkdir -p assets/optimizedzopflipng -m --prefix=assets/optimized/ assets/source/*.png
В build-процессе важно не запускать тяжелую оптимизацию без необходимости. Если каждый локальный запуск npm run build будет пересжимать сотни PNG через -m и --iterations=500, сборка станет раздражающе медленной. Лучше разделить задачи:
{ "scripts": { "build": "vite build", "optimize:png": "zopflipng -m --prefix=dist/assets/ dist/assets/*.png", "build:release": "npm run build && npm run optimize:png" }}
Так обычная сборка остается быстрой, а релизная дополнительно оптимизирует PNG.
Качество сжатия и скорость
ZopfliPNG — инструмент с ярко выраженным компромиссом. Он может давать хороший размер, но требует больше CPU-времени, чем многие быстрые оптимизаторы. Это связано с самой философией Zopfli: программа тратит время на более тщательный поиск выгодного Deflate-представления.
В практическом обзоре ZopfliPNG важно оценивать не только процент уменьшения, но и стоимость обработки. Если файл сжался с 200 КБ до 170 КБ за несколько секунд, результат отличный. Если файл сжался с 200 КБ до 198 КБ за несколько минут, возможно, для него лучше использовать более быстрый режим или вообще не тратить время.
Сценарии, где медленная работа оправдана:
-
финальная сборка сайта;
-
релиз мобильного приложения;
-
оптимизация набора PNG, который редко меняется;
-
подготовка публичной документации;
-
обработка иконок, которые загружаются на многих страницах;
-
оптимизация ассетов перед публикацией игры.
Сценарии, где ZopfliPNG может быть неудобен:
-
интерактивное редактирование;
-
черновой экспорт после каждого изменения;
-
обработка больших папок на слабом компьютере;
-
CI на каждом коммите без кеширования;
-
оптимизация изображений, которые завтра снова будут заменены.
Разумная стратегия — использовать разные профили. Для черновиков подойдет быстрый режим, для обычной подготовки — базовый запуск, для релиза — -m, а для единичных важных файлов — ручные эксперименты с --iterations и --filters.
Ограничения ZopfliPNG
ZopfliPNG силен в своей узкой области, но у него есть ограничения, которые нужно учитывать до внедрения в рабочий процесс.
Во-первых, у него нет графического интерфейса. Пользователь должен понимать командную строку, пути к файлам, параметры и базовую работу с терминалом. Для человека, который привык перетаскивать картинки в окно программы, ZopfliPNG будет менее удобен, чем ImageOptim, FileOptimizer или PNGGauntlet.
Во-вторых, программа не показывает предпросмотр. Она не дает сравнить картинку до и после внутри окна, не подсвечивает измененные пиксели, не показывает метаданные в отдельной панели. Проверка результата остается на пользователе.
В-третьих, zopflipng работает только с PNG. Он не оптимизирует JPEG, GIF, WebP, SVG или AVIF. Если в проекте разные форматы, понадобится набор инструментов: например, JPEG обрабатывать через jpegoptim или MozJPEG, SVG через SVGO, GIF через gifsicle, а PNG через ZopfliPNG, Oxipng или OptiPNG.
В-четвертых, ZopfliPNG может быть медленным. Это нормально для его алгоритма, но не всегда удобно. Для массовой ежедневной обработки может лучше подойти Oxipng или другой быстрый инструмент, а zopflipng оставить для финального релиза.
В-пятых, программа удаляет необязательные chunks. Для веб-графики это часто плюс, но для файлов с важными metadata нужно использовать --keepchunks.
В-шестых, lossy-параметры требуют понимания. --lossy_transparent обычно безопасен для видимого результата, но меняет скрытые цвета прозрачных пикселей. --lossy_8bit снижает глубину каналов с 16 бит до 8 бит. Эти параметры нельзя считать универсально безопасными для любых PNG.
Безопасность и сохранность данных
Правильная работа с ZopfliPNG начинается с простого правила: не обрабатывать единственные копии важных файлов. Утилита предназначена для оптимизации готовых PNG, а не для хранения исходников. Если файл является мастер-экспортом, лучше оставить его отдельно.
Безопасный порядок:
-
Хранить исходные PNG в отдельной папке.
-
Оптимизированные версии записывать в другую папку или с префиксом.
-
Проверять размер и визуальный результат.
-
Использовать
--keepchunks, если важны gamma, DPI, ICC или текстовые метаданные. -
Не применять lossy-параметры без понимания последствий.
-
Автоматическую замену файлов делать только после теста на копии проекта.
Пример безопасной команды:
mkdir -p optimizedzopflipng -m --prefix=optimized/ *.png
Так исходники остаются нетронутыми. Если результат понравился, можно заменить файлы вручную или отдельным скриптом.
Для прозрачных PNG можно использовать:
mkdir -p optimizedzopflipng -m --lossy_transparent --prefix=optimized/ *.png
Но перед массовым применением стоит проверить несколько файлов в браузере, графическом редакторе и целевой среде. Особенно это важно для интерфейсов, где прозрачные пиксели могут участвовать в масштабировании.
Сравнение с аналогами
ZopfliPNG стоит сравнивать не с графическими редакторами, а с другими PNG-оптимизаторами и инструментами сжатия изображений. Его ближайшие конкуренты — OptiPNG, Oxipng, PNGOUT, pngquant и программы с графическим интерфейсом вроде ImageOptim.
ZopfliPNG и OptiPNG
OptiPNG — классический CLI-оптимизатор PNG. Он подбирает параметры PNG-сжатия, может менять фильтры и обычно работает быстрее, чем тяжелые Zopfli-сценарии. OptiPNG удобен для регулярной lossless-оптимизации, когда нужен стабильный инструмент без чрезмерных затрат времени.
ZopfliPNG интереснее на финальном этапе, где важен минимальный размер и можно подождать. Он может быть медленнее, но за счет Zopfli-сжатия часто дает более плотный результат. Для ежедневной обработки больших папок OptiPNG может быть практичнее, а для релизной оптимизации ключевых PNG — ZopfliPNG.
ZopfliPNG и Oxipng
Oxipng — современный PNG-оптимизатор, ориентированный на скорость, удобство и массовую обработку. Он хорошо подходит для CI, больших проектов и автоматических пайплайнов. У Oxipng есть сильная сторона: его проще использовать как быстрый стандартный оптимизатор для большого числа файлов.
ZopfliPNG работает в другой логике. Его выбирают тогда, когда время сжатия менее важно, чем плотность результата. Если нужно регулярно прогонять тысячи PNG, Oxipng часто удобнее. Если нужно максимально выжать набор финальных PNG перед публикацией, zopflipng остается сильным вариантом.
ZopfliPNG и PNGOUT
PNGOUT исторически известен как очень сильный PNG-компрессор. Его часто сравнивают с ZopfliPNG именно по итоговому размеру. Оба инструмента интересны пользователям, которым важна плотная оптимизация PNG, а не красивая оболочка.
ZopfliPNG удобен тем, что он работает в понятной open-source CLI-логике и легко встраивается в скрипты. PNGOUT может показывать сильные результаты, но рабочий процесс вокруг него зависит от платформы, сборки и выбранной оболочки. В проектах, где важна воспроизводимость и автоматизация, zopflipng обычно проще описать в документации: команда, параметры, вход, выход.
ZopfliPNG и pngquant
pngquant решает другую задачу. Он уменьшает PNG за счет преобразования в палитровое изображение с потерями. Результат может быть намного меньше, чем у lossless-инструментов, но цвета меняются. Для многих веб-изображений это приемлемо, особенно если палитра подобрана аккуратно. Для точных скриншотов, UI-элементов и изображений, где нельзя менять цвета, pngquant требует осторожности.
ZopfliPNG в базовом режиме не работает как палитровый lossy-компрессор. Он оптимизирует PNG-структуру, Deflate-сжатие, фильтры и chunks. Поэтому сравнение с pngquant зависит от цели. Если нужен максимально маленький файл и допустимы потери, pngquant может выиграть. Если нужен PNG с сохранением видимого результата и без агрессивной цветовой редукции, лучше начинать с ZopfliPNG.
Практически эти инструменты иногда используют в связке: сначала pngquant уменьшает палитру, затем ZopfliPNG пересжимает итоговый PNG. Но такой сценарий уже не является чисто lossless относительно исходника.
ZopfliPNG и ImageOptim
ImageOptim — удобная macOS-программа с графическим интерфейсом. Пользователь перетаскивает изображения в окно, а программа применяет несколько оптимизаторов. Это хороший вариант для тех, кто не хочет работать с терминалом.
ZopfliPNG дает другой контроль. В нем явно видны параметры: --iterations, --filters, --keepchunks, --lossy_transparent, --lossy_8bit, --prefix. Его проще зафиксировать в скрипте и повторить на сервере, в CI или на другой машине. ImageOptim удобнее для ручной оптимизации, ZopfliPNG удобнее для воспроизводимого CLI-workflow.
| Программа | Интерфейс | Основной сценарий | Сильная сторона | Ограничение |
|---|---|---|---|---|
ZopfliPNG / zopflipng |
CLI | финальное PNG-сжатие | плотное Deflate-сжатие и точные параметры | медленная работа |
| OptiPNG | CLI | регулярная lossless-оптимизация | простота и стабильность | не всегда максимальный размер |
| Oxipng | CLI | массовая оптимизация и CI | скорость и удобство в пайплайнах | итог зависит от файла и режима |
| PNGOUT | CLI / оболочки | плотное PNG-сжатие | сильные результаты на отдельных файлах | менее удобный универсальный workflow |
| pngquant | CLI / оболочки | сильное уменьшение через палитру | радикальная экономия размера | потери цвета |
| ImageOptim | GUI | ручная оптимизация на macOS | drag-and-drop и простота | меньше явного контроля параметров |
Таблица параметров ZopfliPNG
| Параметр | Что делает | Когда использовать |
|---|---|---|
-m |
включает более интенсивное сжатие | финальная оптимизация сайта, приложения или ассетов |
-q |
быстрый режим с не лучшим сжатием | предварительная проверка |
-y |
не спрашивает о перезаписи | скрипты, CI, пакетная обработка |
-d |
dry run без сохранения файлов | бенчмарки, тесты, диагностика |
--prefix=[fileprefix] |
добавляет префикс к выходным файлам | обработка нескольких PNG |
--iterations=[number] |
задает число итераций | ручной баланс скорости и размера |
--filters=[types] |
задает стратегии PNG-фильтров | поиск лучшего результата на сложных файлах |
--keepchunks=nAME,nAME |
сохраняет выбранные metadata chunks | gamma, DPI, ICC, текстовые данные |
--lossy_transparent |
меняет скрытые цвета полностью прозрачных пикселей | прозрачная веб-графика и UI-иконки |
--lossy_8bit |
переводит 16-битные каналы в 8-битные | веб-графика, где 16 бит не нужны |
--always_zopflify |
выводит Zopfli-результат даже при большем размере | тестирование алгоритма |
--keepcolortype |
сохраняет исходный color type и bit depth | совместимость с конкретным пайплайном |
--splitting=[0-3] |
оставлен для обратной совместимости | практически не нужен в обычной работе |
Эта таблица удобна как шпаргалка. В ежедневном использовании чаще всего нужны -m, --prefix, --lossy_transparent, --keepchunks и --iterations. Остальные параметры применяются по ситуации.
Примеры команд для разных случаев
Обычная оптимизация одного файла
zopflipng input.png output.png
Подходит для первого запуска и базовой проверки. Исходник остается на месте, результат сохраняется отдельно.
Более плотное сжатие
zopflipng -m input.png output.png
Хороший вариант для финальной подготовки PNG к публикации.
Оптимизация прозрачной иконки
zopflipng -m --lossy_transparent icon.png icon.min.png
Подходит для веб-иконок и интерфейсной графики с прозрачностью.
Сохранение gamma и DPI
zopflipng -m --keepchunks=gAMA,pHYs input.png output.png
Нужно, если важны gamma-информация и физическая плотность.
Сохранение ICC-профиля
zopflipng -m --keepchunks=iCCP,gAMA input.png output.png
Подходит для изображений, где цветовой профиль нельзя удалять.
Пакетная обработка в текущей папке
zopflipng -m --prefix=optimized_ *.png
Создает оптимизированные копии с префиксом optimized_.
Пакетная обработка в отдельную папку
mkdir -p optimizedzopflipng -m --prefix=optimized/ *.png
Более аккуратный вариант, потому что исходники и результаты не смешиваются.
Агрессивный тест фильтров и итераций
zopflipng --iterations=500 --filters=01234mepb --lossy_transparent input.png output.png
Подходит для отдельных важных файлов, но не для бездумной массовой обработки.
Dry run для проверки
zopflipng -d -m input.png output.png
Показывает вывод без сохранения результата.
Быстрый тест
zopflipng -q input.png output.png
Используется для предварительной проверки, а не для финального файла.
Типичные ошибки пользователей
Одна из частых ошибок — ожидать от ZopfliPNG графический интерфейс. Это консольный оптимизатор. Если пользователь запускает его двойным щелчком по файлу в Windows, окно может быстро закрыться или показать справку. Правильная работа идет через терминал.
Вторая ошибка — перезаписывать исходники без копии. Даже если базовый режим ориентирован на безопасную оптимизацию, исходные файлы лучше хранить отдельно. Особенно это важно для PNG с метаданными, цветовым профилем или 16-битной глубиной.
Третья ошибка — применять --lossy_8bit ко всем файлам. Этот параметр меняет глубину каналов. Он полезен для веба, но не универсален.
Четвертая ошибка — включать --iterations=500 для огромной папки и ждать быстрого результата. ZopfliPNG может работать долго. Сначала нужно протестировать несколько файлов и оценить время.
Пятая ошибка — не сохранять нужные chunks. Если проект зависит от ICC-профиля, gamma или DPI, их надо явно оставить через --keepchunks.
Шестая ошибка — сравнивать только проценты. Например, уменьшение на 2% у файла 5 МБ может быть важнее, чем уменьшение на 20% у маленькой иконки 1 КБ. Нужно смотреть и процент, и абсолютный выигрыш, и частоту загрузки файла.
Седьмая ошибка — использовать ZopfliPNG вместо выбора правильного формата. Если изображение является фотографией, PNG может быть неверным форматом. ZopfliPNG уменьшит файл, но JPEG, WebP или AVIF могут быть гораздо уместнее. zopflipng хорош именно для тех случаев, где PNG действительно нужен.
Практические профили настроек
Безопасный профиль
zopflipng input.png output.png
Это лучший стартовый вариант. Он не использует lossy-параметры и дает понятное поведение.
Финальный веб-профиль для прозрачной графики
zopflipng -m --lossy_transparent input.png output.png
Подходит для иконок, кнопок, UI-элементов и декоративных прозрачных PNG. Перед массовым применением нужно проверить несколько файлов.
Профиль с сохранением важных chunks
zopflipng -m --keepchunks=iCCP,gAMA,pHYs input.png output.png
Подходит, если нужно сохранить цветовой профиль, gamma и DPI.
Профиль для обычной пакетной обработки
mkdir -p optimizedzopflipng -m --prefix=optimized/ *.png
Хороший вариант для папки с PNG: результаты сохраняются отдельно.
Агрессивный профиль для отдельных файлов
zopflipng --iterations=500 --filters=01234mepb --lossy_transparent input.png output.png
Подходит для важных PNG, где можно потратить время на максимальный результат.
Профиль для 16-битного веб-экспорта
zopflipng -m --lossy_8bit input-16bit.png output-web.png
Используется только тогда, когда 16-битная точность не нужна.
Профиль для CI
zopflipng -m -y --prefix=optimized_ *.png
-y убирает интерактивные вопросы, а --prefix не трогает исходники.
Для кого ZopfliPNG подходит лучше всего
ZopfliPNG хорошо подходит веб-разработчикам, которые хотят уменьшить PNG-ассеты перед публикацией. Программа легко вписывается в shell-скрипт, npm-script или релизный пайплайн. Ее можно запускать одинаково на локальной машине, сервере сборки и в контейнере.
Она полезна авторам документации. Скриншоты интерфейсов часто сохраняются в PNG, потому что текст и линии остаются четкими. JPEG портит такие изображения артефактами, а ZopfliPNG позволяет уменьшить вес без перехода к фотографическому сжатию.
ZopfliPNG подходит разработчикам игр, если движок использует PNG-ассеты. Прозрачные спрайты, UI-панели, иконки и элементы меню часто хорошо сжимаются после экспорта.
Программа полезна дизайнерам интерфейсов, которые готовят PNG для передачи разработчикам. Она не заменяет дизайн-инструмент, но помогает сделать финальные exports компактнее.
Также zopflipng подходит техническим редакторам, владельцам сайтов и специалистам по производительности. Если страница содержит много PNG, оптимизация каждого файла может дать суммарное снижение веса.
Кому лучше выбрать другую программу
Если нужен графический интерфейс и drag-and-drop, лучше выбрать ImageOptim на macOS, FileOptimizer на Windows или PNGGauntlet. Эти программы удобнее для ручной работы и не требуют знания командной строки.
Если нужна быстрая массовая обработка, стоит посмотреть на Oxipng. Он удобен для больших папок и CI, где скорость важнее минимального возможного размера.
Если допустимы потери цвета ради сильного уменьшения, нужен pngquant. Он может радикально снизить вес PNG, но результат уже не будет lossless относительно исходника.
Если нужно редактировать изображение, ZopfliPNG вообще не является правильным выбором. Для редактирования нужны Photoshop, GIMP, Photopea, Paint.NET, Krita, Affinity Photo или другой редактор. zopflipng применяется после них, а не вместо них.
Если проект может перейти на WebP или AVIF, стоит сравнить форматы. ZopfliPNG оставляет PNG, что полезно для совместимости, но современные форматы могут дать меньший размер при подходящем сценарии.
Итоговая оценка
ZopfliPNG / zopflipng — сильный консольный PNG-оптимизатор для финального сжатия изображений. Его главная ценность не в удобном интерфейсе, а в качестве результата, воспроизводимости и точном управлении параметрами. Он умеет пересжимать PNG через Zopfli, подбирать фильтры, удалять лишние chunks, сохранять нужные metadata, обрабатывать прозрачность и запускаться пакетно через --prefix.
Программа не подойдет тем, кто хочет быстро перетащить картинки в окно и нажать одну кнопку. Она требует терминала и понимания параметров. Зато в техническом workflow ZopfliPNG раскрывается полностью: его можно встроить в сборку сайта, использовать в скриптах, запускать перед релизом и документировать одной строкой команды.
Лучший сценарий использования — финальная подготовка PNG, которые уже не будут часто меняться. Для черновой работы можно использовать быстрые инструменты, а zopflipng оставить для последнего прохода. Такой подход дает хороший баланс: разработка не замедляется, но итоговые PNG становятся компактнее.
ZopfliPNG особенно стоит использовать для иконок, прозрачной веб-графики, скриншотов документации, UI-ассетов и PNG-файлов, которые нельзя заменить другим форматом. Если нужен точный, управляемый и воспроизводимый PNG-оптимизатор, zopflipng остается одним из самых полезных инструментов в этой нише.