Zopflipng: программа для оптимизации PNG

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

Скачать Zopflipng

БесплатноОптимизацияWindows

Для сжатия и оптимизации файлов

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

Главная особенность ZopfliPNG — ориентация не на скорость, а на плотность сжатия. Утилита использует алгоритм Zopfli для Deflate-сжатия, перебирает стратегии PNG-фильтрации, может менять цветовой тип там, где это не меняет видимое изображение, и удаляет необязательные chunks, которые обычно не нужны для веб-публикации. Поэтому zopflipng особенно полезен на финальном этапе подготовки PNG-графики: когда сайт уже собран, иконки экспортированы, скриншоты документации готовы, а набор ассетов для приложения или игры больше не меняется каждые пять минут.

Это не программа для пользователя, который ждет окно с кнопками Open, Preview, Compress и Save. ZopfliPNG работает через командную строку. Его интерфейс — это команда, параметры, входной PNG-файл, выходной PNG-файл и текстовый вывод в терминале. Зато такой формат дает точный контроль: можно явно указать режим сжатия, сохранить нужные chunks, запустить пакетную обработку, встроить оптимизацию PNG в скрипт, CI/CD или локальный build-процесс.

Скриншот ZopfliPNG в терминале: справка, параметры и пример вывода при обработке PNG

Содержание

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

Типичный порядок действий:

  1. Подготовить PNG в графическом редакторе или получить его из скриншота.

  2. Открыть терминал в папке с файлом.

  3. Выполнить команду zopflipng input.png output.png.

  4. Сравнить размер input.png и output.png.

  5. Открыть оба файла в просмотрщике.

  6. Заменить исходник оптимизированной версией только после проверки.

Пример:

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

Пример запуска zopflipng screenshot.png screenshot_small.png: программа показывает исходный размер, результат и процент от оригинала

Усиленное сжатие через -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, а не для хранения исходников. Если файл является мастер-экспортом, лучше оставить его отдельно.

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

  1. Хранить исходные PNG в отдельной папке.

  2. Оптимизированные версии записывать в другую папку или с префиксом.

  3. Проверять размер и визуальный результат.

  4. Использовать --keepchunks, если важны gamma, DPI, ICC или текстовые метаданные.

  5. Не применять lossy-параметры без понимания последствий.

  6. Автоматическую замену файлов делать только после теста на копии проекта.

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

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 остается одним из самых полезных инструментов в этой нише.


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