ZopfliPNG — специализированная консольная программа для уменьшения размера PNG-файлов. Исполняемая команда называется zopflipng, а задача программы сводится к одному направлению: взять входной PNG, подобрать более компактное представление данных и записать оптимизированный PNG на выходе. Это не фоторедактор, не просмотрщик изображений и не пакетная графическая оболочка, а утилита для сжатия PNG через командную строку.
Программа использует Zopfli-сжатие для Deflate, сравнивает стратегии выбора PNG-фильтров, подбирает подходящий color type для lossless-кодирования, удаляет несущественные для типичного веб-использования chunks и умеет изменять скрытые цвета полностью прозрачных пикселей для дополнительного уменьшения размера файла. Для 16-битных изображений есть отдельный режим перевода каналов в 8 бит, но этот режим требует контроля, потому что меняет техническую глубину цвета.
ZopfliPNG полезен там, где важен каждый килобайт: статические изображения сайта, интерфейсные иконки, PNG-ассеты приложения, графика для документации, скриншоты, схемы, прозрачные элементы интерфейса. Его выбирают не ради скорости, а ради плотного сжатия PNG без перехода на другой формат. Для обычного редактирования изображений лучше смотреть в сторону графических редакторов и просмотрщиков: например, на freeexe есть разделы редакторов изображений, просмотрщиков изображений, а для пакетной работы с изображениями уместно сравнить ZopfliPNG с Converseen, XnView MP, XnView, IrfanView и FastStone Image Viewer.
Что делает ZopfliPNG
Главная задача ZopfliPNG — оптимизация PNG-файлов. На вход подаётся PNG, на выходе получается PNG меньшего размера. В базовом сценарии видимые пиксели остаются теми же: программа заново кодирует данные внутри файла, подбирает более удачные фильтры и использует плотное Deflate-сжатие. Команда имеет формат zopflipng [options]... infile.png outfile.png, а для нескольких файлов применяется вариант zopflipng [options]... --prefix=[fileprefix] [files.png]....
ZopfliPNG не меняет разрешение изображения, не кадрирует картинку, не ретуширует детали, не рисует поверх PNG, не конвертирует PNG в WebP или JPEG. Его область — сжатие PNG без перехода в другой формат. Если требуется изменить размер изображения, повернуть картинку, добавить водяной знак, выполнить цветокоррекцию или экспортировать в разные форматы, понадобится другая программа. ZopfliPNG стоит ставить в цепочку после таких операций, когда изображение уже подготовлено и его осталось уменьшить перед публикацией или сборкой.
Программа особенно полезна для файлов, которые редко меняются. Если PNG один раз обработан и затем долго раздаётся с сайта, входит в пакет приложения или лежит в документации, длительная обработка оправдана. Если изображения генерируются непрерывно, например при массовой выгрузке превью каждую минуту, ZopfliPNG может оказаться слишком медленным этапом.
Чем ZopfliPNG отличается от обычного сжатия PNG
PNG уже использует сжатие, поэтому простое сохранение картинки в графическом редакторе не всегда даёт минимальный размер. Разные программы выбирают разные PNG-фильтры, уровни сжатия, color type и набор служебных chunks. ZopfliPNG пытается найти более компактное представление того же изображения, перебирая стратегии и применяя Zopfli к Deflate-потоку.
Алгоритм Zopfli рассчитан на более плотное сжатие по сравнению с обычными Deflate/zlib-подходами. Обратная сторона — высокая длительность сжатия. Zopfli создаёт совместимый Deflate-поток: декодирование выполняется стандартными средствами, поэтому итоговый PNG остаётся обычным PNG-файлом. Zopfli как библиотека поддерживает deflate, gzip и zlib output, но ZopfliPNG использует эту идею именно для PNG.
Важное отличие от архиватора: ZIP, 7z или RAR сжимают файл как контейнер, а ZopfliPNG оптимизирует внутреннее устройство самого PNG. После обработки файл можно сразу использовать в браузере, интерфейсе приложения, документации или сборке сайта. Пользователю не нужно распаковывать архив, а браузеру не нужен новый формат.
Для кого подходит ZopfliPNG
ZopfliPNG рассчитан на пользователей, которым удобна командная строка и нужен контролируемый процесс сжатия PNG. Веб-разработчик может запускать zopflipng перед выкладкой статичных ассетов. Верстальщик может уменьшать иконки, логотипы и схемы, сохраняя PNG-формат. Разработчик приложения может обработать набор PNG перед упаковкой релиза. Автор документации может сжать скриншоты интерфейса, чтобы уменьшить вес страницы или архива.
Для регулярной работы ZopfliPNG особенно удобен там, где есть скрипты: shell, PowerShell, Makefile, npm scripts, CI-сборка, пайплайн статического генератора. Программа не требует ручного выбора файлов в окне, поэтому её можно встроить в автоматизацию. При этом она требует аккуратности: перезапись, удаление metadata chunks и агрессивные параметры должны контролироваться заранее.
ZopfliPNG не подойдёт пользователю, которому нужен визуальный интерфейс с кнопками, предпросмотром и перетаскиванием файлов. В нём нет панели инструментов, миниатюр, вкладки экспорта, списка эффектов и окна сравнения до/после. Для визуальной пакетной обработки лучше использовать графические утилиты, а ZopfliPNG оставить как финальный компрессор.
Интерфейс программы
У ZopfliPNG нет графического интерфейса. Рабочая среда программы — терминал. Вместо кнопок используются команды и параметры: имя утилиты zopflipng, набор опций, входной файл и выходной файл. Основной синтаксис выглядит так:
zopflipng [options]... infile.png outfile.pngДля обработки нескольких файлов используется --prefix. В этом режиме ZopfliPNG получает список PNG-файлов и создаёт выходные файлы с заданным префиксом:
zopflipng [options]... --prefix=[fileprefix] [files.png]...Если выходной файл уже существует, ZopfliPNG рассматривает его как результат предыдущего запуска и не перезаписывает, когда существующий файл меньше нового результата. Такое поведение защищает уже удачно оптимизированный файл от ухудшения размера.

На скриншоте видно, что программа выводит справку прямо в терминал: синтаксис, параметры, примеры использования и результат обработки файла. Для ZopfliPNG это и есть основной интерфейс. Пользователь управляет не кнопками, а флагами вроде -m, --iterations, --filters, --keepchunks, --lossy_transparent, -d, -y и --prefix.
Основные возможности
Оптимизация одного PNG-файла
Базовая операция — сжатие одного файла:
zopflipng input.png output.pnginput.png — исходное изображение. output.png — результат после оптимизации. В таком режиме ZopfliPNG создаёт отдельный файл, не трогая исходник. Это безопасный способ начать работу: можно сравнить размер, открыть оба изображения и убедиться, что результат подходит для целевого сценария.
Команда полезна для единичных скриншотов, иконок, логотипов, схем и PNG-иллюстраций. Если итоговый файл оказался меньше, его можно использовать вместо исходного. Если выгоды нет или требуется сохранить дополнительные chunks, параметры меняются и команда запускается повторно.
Усиленное сжатие через -m
Флаг -m включает более сильное сжатие. В справке он описан как compress more: программа использует больше итераций в зависимости от размера файла.
zopflipng -m input.png output.pngЭтот режим подходит для финальной подготовки статичных PNG. Его не стоит запускать сразу на большом каталоге без пробы на нескольких файлах: ZopfliPNG и в обычном режиме расходует заметное CPU-время, а усиленное сжатие делает этап ещё длиннее. Для сайта с несколькими десятками редко меняющихся иконок это нормально. Для тысяч генерируемых скриншотов такой режим лучше использовать выборочно.
Быстрая проверка через -q
Флаг -q включает quick compression. Этот режим не нацелен на лучший размер, зато полезен для быстрой проверки PNG-фильтров и color type. В справке он описан как быстрый, но не лучший по качеству сжатия вариант.
zopflipng -q input.png output.png-q уместен, когда нужно быстро понять, меняется ли структура PNG и есть ли смысл дальше тратить время на более тяжёлые параметры. Для финального файла лучше использовать обычный запуск или усиленный режим, потому что ZopfliPNG выбирают именно ради максимального уменьшения размера.
Количество итераций через --iterations
Параметр --iterations=[number] задаёт число итераций Zopfli. Чем больше итераций, тем медленнее работа и тем выше шанс получить немного меньший файл. Значение по умолчанию: 15 для небольших файлов и 5 для крупных файлов.
zopflipng --iterations=50 input.png output.pngУвеличивать число итераций имеет смысл для небольших PNG, которые будут долго использоваться без изменений. На крупных скриншотах и иллюстрациях рост времени обработки быстро становится заметным, а дополнительная экономия часто оказывается небольшой. Важно проверять результат на конкретных файлах: один PNG может хорошо реагировать на дополнительные итерации, другой почти не изменится.
Выбор PNG-фильтров через --filters
PNG-фильтры влияют на то, как данные изображения подготавливаются перед Deflate-сжатием. ZopfliPNG умеет пробовать разные стратегии. В --filters используются значения:
| Значение | Что означает |
|---|---|
0–4 | применить один из стандартных PNG filter types ко всем scanlines |
m | minimum sum |
e | entropy |
p | predefined, то есть сохранение стратегии из входного файла |
b | brute force, экспериментальный перебор |
Хороший набор для проверки — --filters=0me. Для максимально тяжёлого запуска используется набор --filters=01234mepb, но он увеличивает время обработки.
zopflipng --filters=0me input.png output.pngФильтры особенно важны для скриншотов, интерфейсной графики, иконок и изображений с большими однородными областями. На фотографических PNG результат зависит от содержимого: PNG сам по себе не лучший формат для обычных фотографий, но иногда PNG нужен из-за прозрачности, точных цветов или требований рабочего процесса.
Пакетная обработка через --prefix
--prefix добавляет префикс к выходным именам файлов. Параметр может содержать и путь к каталогу. Если --prefix указан без значения, используется zopfli_. При работе с маской *.png файлы, в имени которых уже есть этот префикс, пропускаются как результаты прежних запусков.
zopflipng --prefix=zopfli_ *.pngПосле такой команды рядом с исходниками появятся файлы вида zopfli_icon.png, zopfli_logo.png, zopfli_screen.png. Это безопаснее, чем немедленная перезапись: исходные изображения остаются на месте, а результат можно сравнить по размеру и открыть в браузере или просмотрщике.
Для отдельного каталога можно использовать префикс с путём:
zopflipng --prefix=optimized/ *.pngТакой подход удобен в проектах, где исходники лежат отдельно от оптимизированных ассетов. Например, папка src/images/ хранит PNG после экспорта из редактора, а public/images/ содержит уменьшенные файлы для публикации.
Автоматическое подтверждение через -y
Флаг -y отключает вопросы при перезаписи файлов. Он нужен в скриптах, где программа не должна останавливаться и ждать ответа пользователя.
zopflipng -y input.png output.png-y стоит использовать только тогда, когда команда уже проверена. Для первого запуска безопаснее писать результат в новый файл или применять --prefix. В автоматизации лучше разделять тестовый запуск и финальную обработку: сначала посмотреть, какие имена создаются и насколько уменьшается размер, затем включать перезапись.
Проверочный запуск через -d
Флаг -d включает dry run: программа не сохраняет файлы, а показывает консольный вывод. Такой режим полезен для оценки времени и поведения параметров.
zopflipng -d input.png output.pngDry run помогает подобрать настройки перед массовой обработкой. Можно сравнить обычный режим, -m, разные --filters и число итераций, не создавая десятки выходных файлов. Это особенно удобно при подготовке автоматического сценария: команда уже показывает, как поведёт себя ZopfliPNG, но не меняет рабочую папку.
Сохранение chunks через --keepchunks
По умолчанию ZopfliPNG сохраняет только essential chunks: IHDR, PLTE, tRNS, IDAT, IEND. Остальные metadata chunks удаляются, потому что они увеличивают размер и обычно не нужны для типичного веб-использования. Для сохранения отдельных chunks применяется --keepchunks.
zopflipng --keepchunks=gAMA,pHYs input.png output.pngТакой пример сохраняет gamma и DPI-информацию. Это увеличит размер результата, но иногда важно для корректного отображения или для рабочего процесса, где учитываются физические размеры изображения. Если PNG нужен только как веб-иконка или декоративный ассет, сохранение всех metadata chunks обычно не требуется. Если файл входит в дизайн-систему, техническую документацию или макет с требованиями к цветопередаче, результат лучше проверять в целевой программе просмотра.
--lossy_transparent
Параметр --lossy_transparent удаляет цвета за пикселями с alpha channel 0. Визуальной разницы для полностью прозрачных пикселей нет, но скрытая информация удаляется.
zopflipng --lossy_transparent input.png output.pngЭтот режим полезен для PNG с прозрачностью: иконок, спрайтов, UI-элементов, логотипов, декоративных картинок. Важно понимать нюанс: видимая картинка не меняется там, где пиксель полностью прозрачен, но скрытые цвета под прозрачностью исчезают. Для обычного веб-использования это часто приемлемо. Для специальных графических пайплайнов, где скрытые цвета под альфой используются как технические данные, такой режим не подходит.
--lossy_8bit
Параметр --lossy_8bit переводит 16-битные каналы в 8-битные. Это может уменьшить файл, но меняет техническую глубину изображения.
zopflipng --lossy_8bit input.png output.pngТакой режим нельзя считать универсальным lossless-сценарием. Для веб-иконки, где исходный 16-битный PNG случайно получился из редактора, перевод в 8 бит может быть оправдан. Для медицинских, научных, полиграфических, картографических и других файлов, где глубина цвета несёт рабочую информацию, этот режим исключается. Перед применением нужно понимать, зачем изображение хранится в 16 битах.
Как пользоваться ZopfliPNG
Подготовка файлов
Перед первым запуском стоит сделать рабочую копию PNG. Это не формальность: ZopfliPNG умеет перезаписывать файлы и удаляет служебные chunks, поэтому исходники лучше хранить отдельно. Безопасная схема выглядит так:
Создать папку с копиями PNG.
Выбрать один небольшой файл для пробы.
Открыть терминал в папке с файлом.
Запустить базовую команду с отдельным выходным именем.

Сравнить размер исходника и результата.
Открыть оба PNG в целевом просмотрщике или браузере.
После проверки переходить к пакетной обработке.
Для Windows важно заключать пути с пробелами в кавычки:
zopflipng "C:\Images\input file.png" "C:\Images\output file.png"Для Linux и macOS кавычки также нужны, если в имени файла есть пробелы:
zopflipng "input file.png" "output file.png"Базовая команда для одного файла
zopflipng screenshot.png screenshot_small.pngКоманда берёт screenshot.png и создаёт screenshot_small.png. Такой пример хорошо подходит для первого знакомства с программой: исходный файл не изменяется, результат лежит рядом, а размер можно сравнить штатными средствами файлового менеджера или командой ls -lh.

На примере видно типичный вывод: ZopfliPNG показывает исходный размер, итоговый размер, процент от исходного файла и сообщение о том, что результат меньше. Такой формат вывода удобен в ручной работе и в логах сборки: сразу видно, дал ли запуск практический результат.
Усиленный режим для финального файла
zopflipng -m screenshot.png screenshot_small.png-m подходит для финального прогона. В этом режиме ZopfliPNG тратит больше времени на поиск компактного результата. Его удобно применять к логотипам, иконкам, статичным скриншотам и изображениям, которые будут долго находиться на сайте или в составе программы.
Для одного файла логика простая: если результат стал меньше и визуально совпадает с исходником, можно использовать оптимизированный PNG. Для набора файлов лучше сначала выбрать 5–10 типичных изображений: иконку с прозрачностью, скриншот интерфейса, простую схему, большой PNG с градиентом и файл с metadata chunks. Так проще понять, где выигрыш заметный, а где программа почти ничего не меняет.
Подбор итераций
zopflipng --iterations=100 screenshot.png screenshot_small.pngУвеличение числа итераций не гарантирует пропорционального уменьшения размера. Это не регулятор качества, как в JPEG, а параметр поиска более плотного Deflate-представления. После некоторого уровня выигрыш становится небольшим, а время продолжает расти. Поэтому разумная схема — проверить несколько значений на одном файле, а затем применить выбранный режим к похожим изображениям.
Для ассетов сайта можно сравнить:
zopflipng screenshot.png out_default.pngzopflipng -m screenshot.png out_more.pngzopflipng --iterations=50 screenshot.png out_50.pngzopflipng --iterations=100 --filters=0me screenshot.png out_100_filters.pngЗатем достаточно сравнить размеры выходных файлов. Визуальную проверку всё равно стоит выполнить, если использовались параметры, меняющие скрытые данные или глубину цвета.
Пакетная обработка каталога
zopflipng --prefix=zopfli_ *.pngЭта команда обрабатывает все PNG в текущей папке и создаёт отдельные файлы с префиксом zopfli_. При повторном запуске файлы, уже начинающиеся с этого префикса, не будут обрабатываться как обычные входные изображения. Это удобно при работе с wildcard-маской: оптимизированные копии не попадают в бесконечный повторный цикл.
Если требуется поместить результат в отдельный каталог, префикс можно задать как путь:
zopflipng --prefix=optimized/ *.pngТакой вариант подходит для структуры проекта:
images-src/ icon.png logo.png screenshot.pngimages-optimized/ icon.png logo.png screenshot.pngВ рабочей схеме исходники остаются в images-src, а оптимизированные файлы попадают в каталог публикации. Это снижает риск случайно потерять metadata chunks, 16-битную глубину или скрытую информацию под прозрачностью.
Сохранение нужной служебной информации
zopflipng --keepchunks=gAMA,pHYs screenshot.png screenshot_small.png--keepchunks нужен там, где дополнительные chunks имеют значение. В PNG могут быть данные о gamma, физическом размере пикселя, текстовые поля, цветовые профили и другие служебные блоки. ZopfliPNG удаляет несущественные chunks для уменьшения размера, но позволяет оставить выбранные имена.
Для веб-иконок обычно достаточно стандартного поведения. Для изображений, где важны gamma или DPI, параметры лучше задавать явно. При сохранении chunks файл становится больше, зато уменьшается риск получить отличающееся отображение в конкретной программе просмотра.
Максимально плотный режим
zopflipng --iterations=500 --filters=01234mepb --lossy_8bit --lossy_transparent input.png output.pngЭто агрессивная команда из справки ZopfliPNG: большое число итераций, широкий перебор фильтров, перевод 16-битных каналов в 8 бит и очистка скрытых цветов полностью прозрачных пикселей. Такой вариант подходит не для всех PNG. Его уместно применять к копии файла, а не к единственному исходнику.
Разбор параметров:
| Параметр | Роль |
|---|---|
--iterations=500 | увеличивает число итераций и время обработки |
--filters=01234mepb | пробует расширенный набор фильтров |
--lossy_8bit | переводит 16-битные каналы в 8 бит |
--lossy_transparent | удаляет скрытые цвета у полностью прозрачных пикселей |
input.png | исходный PNG |
output.png | итоговый PNG |
Этот режим особенно требователен к проверке. Для интерфейсных иконок он может дать хороший результат. Для файлов с важной глубиной цвета или специальными данными под прозрачностью лучше исключить --lossy_8bit и --lossy_transparent.
Что происходит внутри PNG при обработке
PNG хранит изображение не как простую матрицу пикселей, а как набор chunks. Среди них есть обязательные блоки, без которых файл не будет нормальным PNG, и дополнительные блоки с metadata. ZopfliPNG сохраняет essential chunks и перестраивает содержимое так, чтобы видимое изображение занимало меньше места. По умолчанию сохраняются IHDR, PLTE, tRNS, IDAT и IEND.
Центральная область оптимизации — IDAT, где находится сжатый поток данных изображения. Перед Deflate-сжатием PNG использует фильтрацию строк. От выбора фильтра зависит, насколько хорошо повторяющиеся закономерности затем сожмутся. Поэтому ZopfliPNG проверяет стратегии фильтрации и оставляет тот вариант, который даёт меньший файл.
Вторая важная область — color type. PNG может хранить изображение разными способами: например, с палитрой, с альфа-каналом, в grayscale или RGB-представлении. ZopfliPNG выбирает подходящий color type для lossless-кодирования изображения. Если картинка реально может быть сохранена компактнее без изменения видимых пикселей, программа использует это.
Третья область — metadata chunks. Текстовые поля, gamma, DPI и другие дополнительные данные увеличивают размер. Для веб-графики они часто не нужны. Для технических изображений они могут быть важны, поэтому в ZopfliPNG есть --keepchunks.
Поддерживаемые форматы и границы применения
ZopfliPNG работает с PNG. Входной файл — infile.png, выходной файл — outfile.png. Команда не предназначена для JPEG, WebP, AVIF, TIFF, BMP или GIF. Если исходное изображение находится в другом формате, сначала нужно подготовить PNG другим инструментом, а затем обработать его через ZopfliPNG.
Zopfli как библиотека шире: она выполняет deflate, gzip и zlib data encoding, а базовая функция ZopfliCompress поддерживает deflate, gzip и zlib output. При этом библиотека только сжимает данные и не выполняет распаковку; существующие zlib/deflate-библиотеки могут распаковывать результат.
Для обзора ZopfliPNG важен именно PNG-сценарий. zopflipng не заменяет zopfli_bin и не является универсальным архиватором. Это отдельный инструмент для PNG-оптимизации.
Системные требования
ZopfliPNG — консольная программа, поэтому её требования зависят от способа запуска и сборки. Для работы нужен исполняемый файл zopflipng под соответствующую операционную систему. Для сборки из исходников нужны компилятор C/C++ и исходные файлы проекта. README для ZopfliPNG описывает сборку всех .c, .cc и .cpp файлов из src/zopfli, src/zopflipng и src/zopflipng/lodepng в один бинарный файл через C++; для Linux также предусмотрен Makefile и команда make zopflipng.
Практически важнее не объём памяти, а процессорное время. ZopfliPNG использует на 2–3 порядка больше CPU-времени для сжатия по сравнению с libpng. Поэтому на слабом компьютере крупные PNG и высокие значения --iterations будут обрабатываться долго.
Минимальная рабочая конфигурация для ZopfliPNG выглядит так:
| Компонент | Что требуется |
|---|---|
| Операционная система | среда, в которой можно запустить собранный zopflipng |
| Интерфейс | терминал или командная оболочка |
| Входные данные | PNG-файлы |
| Процессор | чем выше число итераций и больше файлы, тем важнее производительность CPU |
| Дисковое пространство | место для исходных и выходных PNG |
| Для сборки | компилятор C/C++ и исходники проекта |
У программы нет требований к видеокарте, графической оболочке или аппаратному ускорению. Она не использует GPU-обработку и не нуждается в установленном графическом редакторе.
Скорость и качество сжатия
ZopfliPNG выбирают за размер результата, а не за скорость. В README приведено сравнение: на корпусе из 1000 PNG с полупрозрачностью, случайно выбранных из интернета, ZopfliPNG дал улучшение на 12% по сравнению с convert -q 95, но только на 0,5% по сравнению с pngout в лучшем из /f0 и /f5 запусков. Там же указано, что возможности оптимизации внутри PNG ограничены.

Диаграмма показывает типичный смысл работы ZopfliPNG: размер уменьшается без перехода к редактированию картинки. При этом результат зависит от исходника. Сильно оптимизированный PNG может почти не уменьшиться. PNG с лишними chunks, неудачными фильтрами или неэффективным сжатием обычно даёт больший выигрыш.
Для оценки результата нужно смотреть не только на процент уменьшения. Правильная проверка состоит из четырёх пунктов:
итоговый файл меньше исходного;
видимые пиксели совпадают при lossless-сценарии;
нужные chunks сохранены, если они важны для проекта.
ZopfliPNG не обещает одинаковую экономию на всех изображениях. PNG с простой палитрой, прозрачностью и большим количеством повторяющихся областей может уменьшиться заметно. Файл, уже обработанный сильным оптимизатором, даст меньший выигрыш. Большой фотографический PNG часто лучше сначала пересмотреть с точки зрения формата: для обычных фотографий JPEG, WebP или AVIF часто рациональнее, но ZopfliPNG нужен, когда по условиям работы требуется именно PNG.
Практические сценарии
Оптимизация изображений для сайта
На сайте ZopfliPNG уместен для иконок, логотипов, декоративных PNG, UI-элементов, схем и скриншотов. Программа не меняет формат, поэтому результат можно использовать в обычном HTML и CSS без дополнительных условий. Для статических ассетов логика простая: графика готовится в редакторе, затем проходит через zopflipng, после чего оптимизированный файл попадает в публичную папку сайта.
Рабочая схема:
zopflipng -m --prefix=public/img/ src/img/*.pngЭта команда показывает идею, но структуру каталогов нужно подстроить под проект. Важно не смешивать исходники и выходные файлы, особенно когда дизайн регулярно меняется. Исходные PNG лучше хранить отдельно, а ZopfliPNG использовать как финальный этап перед публикацией.
Для смежных задач на freeexe можно использовать материалы о графических программах: GIMP, Paint.NET, Inkscape, XnView MP. Эти программы решают другие задачи: редактирование, просмотр, конвертацию и пакетную работу. ZopfliPNG подключается после них, когда PNG уже готов.
Подготовка PNG-ассетов для приложения
В приложениях PNG часто используются как иконки, элементы интерфейса, спрайты, заставки, иллюстрации в справке. ZopfliPNG подходит для финального уменьшения такого набора, потому что результат остаётся обычным PNG. Особенно полезен --lossy_transparent, если в ассетах много полностью прозрачных пикселей.
![]()
Пример безопасной обработки:
zopflipng -m --lossy_transparent --prefix=optimized/ assets/*.pngПосле обработки нужно открыть приложение или тестовый экран и проверить прозрачные края, тени, полупрозрачные области и масштабирование. Полностью прозрачные скрытые цвета исчезают, но полупрозрачные пиксели должны отображаться корректно. Если пайплайн использует скрытые цвета под прозрачностью как технические данные, --lossy_transparent не применяют.
Сжатие скриншотов для документации
PNG остаётся удобным форматом для скриншотов интерфейса: текст читается чётко, линии не получают JPEG-артефакты, плоские области хорошо сжимаются. ZopfliPNG помогает уменьшить такие изображения без ухудшения видимого текста.
Пример:
zopflipng -m docs/screen-settings.png docs/screen-settings.opt.pngДля документации важно проверить не только размер. Скриншот должен оставаться читаемым после вставки на страницу. Если в PNG есть служебная информация о gamma или физическом размере, её нужно сохранить явно:
zopflipng -m --keepchunks=gAMA,pHYs docs/screen.png docs/screen.opt.pngАвтоматизация в сборке
ZopfliPNG удобно запускать в автоматических сценариях. В отличие от графических программ, он не требует ручного выбора файлов. Его можно применять после генерации ассетов, после экспорта скриншотов или перед упаковкой релиза.
Пример shell-сценария:
mkdir -p public/imageszopflipng -m --prefix=public/images/ src/images/*.pngДля перезаписи файлов в автоматике используют -y, но безопаснее сначала создавать отдельную папку результата. Если проект хранится в системе контроля версий, изменения размера и содержимого файлов легко отследить. Если контроля версий нет, исходники лучше не перезаписывать.
Архивирование статичных PNG
ZopfliPNG рационален для файлов, которые сжимаются один раз и затем долго используются. Это может быть набор иконок, документация, скриншоты для сайта, графика в архиве приложения. В таких сценариях время обработки тратится один раз, а уменьшенный размер даёт пользу при каждом дальнейшем хранении или передаче.
Для часто меняющихся файлов лучше сравнить ZopfliPNG с более быстрыми аналогами. Например, Oxipng использует многопоточную lossless-оптимизацию PNG/APNG и работает как CLI или Rust-библиотека.
Плюсы и минусы
Плюсы:
уменьшает размер PNG без перехода на другой формат;
работает из командной строки и подходит для автоматизации;
поддерживает обработку нескольких файлов через
--prefix;позволяет управлять итерациями через
--iterations;даёт контроль над PNG-фильтрами через
--filters;сохраняет выбранные chunks через
--keepchunks;умеет очищать скрытые цвета полностью прозрачных пикселей через
--lossy_transparent;использует открытый код и лицензию Apache-2.0 у проекта Zopfli.
Минусы:
нет графического интерфейса;
обработка медленная по сравнению с обычными PNG-оптимизаторами;
требуется понимание командной строки;
metadata chunks удаляются по умолчанию, кроме essential chunks;
--lossy_8bitменяет техническую глубину цвета;--lossy_transparentудаляет скрытую информацию под полностью прозрачными пикселями;для больших каталогов нужен предварительный тест параметров;
программа не редактирует изображения и не конвертирует PNG в другие форматы.
Сравнение с аналогами
ZopfliPNG логично сравнивать не с редакторами вроде GIMP или Paint.NET, а с PNG-оптимизаторами. Его ближайшее окружение — OptiPNG, pngcrush, Oxipng и pngquant. Первые три ориентированы на lossless-оптимизацию PNG, а pngquant использует lossy-подход через перевод в более компактный 8-битный PNG с альфой.
| Программа | Тип | Основной сценарий | Сильная сторона | Ограничение |
|---|---|---|---|---|
| ZopfliPNG | консольный PNG-оптимизатор | финальное уменьшение статичных PNG | плотное Deflate-сжатие через Zopfli | высокая длительность обработки |
| OptiPNG | консольный PNG-оптимизатор | lossless-оптимизация и обработка PNG на месте | простой запуск и работа с PNG как основным форматом | не нацелен на предельно тяжёлый Zopfli-поиск |
| pngcrush | консольный PNG-оптимизатор | перебор фильтров, уровней сжатия и работа с chunks | гибкое управление PNG-структурой | большое число параметров усложняет настройку |
| Oxipng | многопоточный PNG/APNG-оптимизатор | быстрая lossless-оптимизация в современных пайплайнах | многопоточность, CLI и библиотека Rust | режимы с более тяжёлым сжатием всё равно требуют времени |
| pngquant | lossy PNG-компрессор | сильное уменьшение PNG через палитру | часто резко уменьшает размер 24/32-битных PNG | меняет цветовое представление и не является строгой lossless-заменой |
ZopfliPNG и OptiPNG
OptiPNG обрабатывает PNG и пытается оптимизировать файл без потери качества; для PNG он может заменять исходный файл оптимизированной версией, а для внешних форматов вроде GIF, BMP, PNM и TIFF создаёт оптимизированный PNG.
ZopfliPNG отличается более тяжёлым подходом к Deflate-сжатию. Он лучше подходит для финального прогона, где скорость не критична. OptiPNG удобнее как более привычный lossless-оптимизатор для регулярной обработки, особенно когда нужен простой запуск без агрессивных переборов.
ZopfliPNG и pngcrush
pngcrush — консольный оптимизатор PNG для MSDOS, UNIX и Linux. Его основная задача — уменьшить PNG IDAT datastream через разные compression levels и PNG filter methods; он также умеет удалять unwanted ancillary chunks и добавлять chunks вроде gAMA, tRNS, iCCP и textual chunks.
ZopfliPNG проще по общей концепции: он сфокусирован на Zopfli-сжатии PNG и наборе понятных параметров. pngcrush даёт больше возможностей для манипуляций с chunks и методов перебора, но требует более аккуратного подбора опций. Для пользователя, которому нужен именно плотный финальный PNG, ZopfliPNG выглядит более прямолинейным инструментом. Для технической работы с PNG-структурой pngcrush остаётся сильным вариантом.
ZopfliPNG и Oxipng
Oxipng — многопоточный lossless PNG/APNG compression optimizer, написанный на Rust. Он работает как command-line interface и как библиотека для Rust-программ.
Главное отличие — баланс скорости и плотности. Oxipng лучше вписывается в частые сборки и большие наборы файлов, потому что многопоточность заметна при массовой обработке. ZopfliPNG стоит применять там, где требуется финальный проход над ограниченным набором PNG и допустима длительная обработка. В реальном пайплайне эти инструменты можно сравнить на одном наборе ассетов: если Oxipng даёт близкий размер быстрее, он удобнее для регулярной сборки; если ZopfliPNG даёт меньший файл на критичных изображениях, его используют точечно.
ZopfliPNG и pngquant
pngquant — command-line utility и библиотека для lossy compression PNG images. Он уменьшает файлы за счёт преобразования в более компактный 8-битный PNG с сохранением full alpha transparency; типичный выигрыш может быть очень большим, но это уже не строгое сохранение исходного цветового представления.
ZopfliPNG и pngquant решают разные задачи. ZopfliPNG нужен, когда важно сохранить PNG как можно ближе к исходному lossless-представлению. pngquant подходит, когда допустимо уменьшить цветовое пространство ради сильного сокращения размера. Для веб-графики часто применяют оба подхода по ситуации: иконки с ограниченной палитрой могут хорошо переносить pngquant, а скриншоты с мелким текстом и требованиями к точному виду лучше сначала пробовать через ZopfliPNG или Oxipng.
Отзывы пользователей и профильных изданий
Профессиональные публикации оценивают Zopfli и ZopfliPNG через один и тот же компромисс: результат плотнее, обработка дольше. Google Developers Blog описывает Zopfli как реализацию Deflate, создающую меньший выходной размер, но использующую более exhaustive compression techniques и поэтому работающую заметно медленнее.
InfoWorld при запуске Zopfli акцентировал тот же баланс: сжатие занимает примерно в 100 раз больше времени, но даёт около 5% преимущества относительно zlib и совместимых компрессоров.
The Register сформулировал практический сценарий: Zopfli подходит для данных, которые сжимаются один раз и затем много раз передаются по сети, например для статического веб-контента.
Creative Bloq рассматривал zopflipng как инструмент для продвинутой PNG-оптимизации: он автоматически выбирает стратегию scanline codes, удаляет лишние chunks и может применяться с расширенными параметрами вроде --iterations=500, --filters=01234mepb, --lossy_8bit и --lossy_transparent.
В технических обсуждениях вокруг Zopfli повторяются две оценки. Первая — ZopfliPNG действительно полезен для финальной оптимизации PNG, особенно когда файл будет долго раздаваться как статичный ассет. Вторая — инструмент невыгоден для быстрых и частых операций, где дополнительная экономия в несколько процентов не оправдывает длительный CPU-запуск. В обсуждениях разработчиков часто приводятся примеры, где Zopfli даёт небольшую экономию по сравнению с gzip, но требует намного больше времени; это хорошо показывает общий предел подхода для задач, где скорость сжатия важнее размера.
Итоговая репутация программы узкая, но устойчивая: ZopfliPNG используют как финальный оптимизатор PNG, а не как повседневный графический инструмент. Его ценят за размер результата, предсказуемый CLI-сценарий и совместимость с обычным PNG. Критикуют за медленную обработку, отсутствие интерфейса и необходимость вручную контролировать параметры.
Безопасность и сохранность файлов
ZopfliPNG работает локально: пользователь запускает программу на своих PNG-файлах в терминале. Риск связан не с передачей изображения на сторонний сервер, а с изменением локальных файлов. Самые важные точки контроля:
не перезаписывать единственные исходники при первом запуске;
не включать
-y, пока команда не проверена;использовать
--prefixдля безопасной пакетной обработки;сохранять нужные chunks через
--keepchunks;
не применять
--lossy_8bitк 16-битным изображениям с рабочей ценностью глубины цвета;не применять
--lossy_transparent, если скрытые цвета под прозрачностью используются в пайплайне.
Для проектов с большим количеством ассетов лучше хранить исходные PNG и оптимизированные PNG отдельно. Исходники остаются редактируемой базой, а ZopfliPNG создаёт публикационную версию. Такой подход особенно важен для дизайнерских файлов, документации и интерфейсной графики, где через месяц может понадобиться вернуться к исходнику.
Типичные ошибки при работе
Перезапись без копии
Самая опасная ошибка — запускать агрессивные параметры прямо на рабочем наборе файлов. Даже когда видимое изображение сохраняется, chunks могут быть удалены. Без резервной копии это усложняет возврат к исходному состоянию.
Безопаснее:
zopflipng --prefix=zopfli_ *.pngОпаснее для неподготовленного запуска:
zopflipng -y input.png input.pngДля первых экспериментов выходной файл должен иметь другое имя.
Использование --lossy_8bit без понимания глубины цвета
--lossy_8bit переводит 16-битные каналы в 8-битные. Для веб-иконки это может быть приемлемо, для технического изображения — нет. Если пользователь не знает, почему PNG хранится в 16 битах, лучше не включать этот параметр.
Удаление важных chunks
ZopfliPNG удаляет metadata chunks, не нужные для типичного веб-использования. Но некоторые chunks могут быть важны для конкретного проекта. Если требуется gamma или DPI, их нужно сохранить:
zopflipng --keepchunks=gAMA,pHYs input.png output.pngОжидание графического интерфейса
ZopfliPNG не предлагает окно выбора файлов и кнопку запуска. Все действия выполняются через терминал. Для пользователей, которым нужен визуальный процесс, ZopfliPNG может быть неудобен, даже если результат сжатия хороший.
Запуск максимальных параметров на большом каталоге
Команда с --iterations=500 и --filters=01234mepb может быть очень долгой. Для большого каталога сначала нужно проверить несколько файлов. Если экономия мала, лучше выбрать более быстрый режим или другой оптимизатор.
Сравнение только по размеру
Меньший размер не всегда достаточен. Нужно проверить открытие файла, отображение прозрачности, корректность цвета и сохранение нужных chunks. Особенно это касается графики для приложений и документации.
Полезные команды
Быстрая справка
zopflipngЗапуск без аргументов выводит справку по синтаксису и параметрам. Это удобный способ быстро вспомнить доступные опции.
Обычное сжатие
zopflipng input.png output.pngБазовый вариант для одного файла.
Более сильное сжатие
zopflipng -m input.png output.pngПодходит для финального сжатия статичного PNG.
Пакетная обработка с префиксом
zopflipng --prefix=zopfli_ *.pngСоздаёт оптимизированные копии рядом с исходниками.
Пакетная обработка в отдельный каталог
zopflipng --prefix=optimized/ *.pngСоздаёт результат в отдельной папке.
Сохранение gamma и DPI
zopflipng --keepchunks=gAMA,pHYs input.png output.pngОставляет выбранные chunks.
Очистка скрытых цветов прозрачных пикселей
zopflipng --lossy_transparent input.png output.pngПолезно для PNG с полной прозрачностью, но требует понимания пайплайна.
Проверка без сохранения результата
zopflipng -d input.png output.pngПоказывает вывод без записи файлов.
Широкий перебор фильтров
zopflipng --filters=01234mepb input.png output.pngПробует расширенный набор стратегий фильтрации.
Как оценить результат
После сжатия PNG нужно выполнить несложную проверку:
| Проверка | Что смотреть |
|---|---|
| Размер | итоговый PNG должен быть меньше исходного |
| Открытие | файл должен открываться в целевом браузере или приложении |
| Видимые пиксели | базовый lossless-сценарий не должен менять картинку |
| Прозрачность | края, тени и полупрозрачные области должны отображаться корректно |
| Metadata | нужные chunks должны быть сохранены через --keepchunks |
| Автоматизация | команда должна стабильно работать на наборе файлов |
Для веб-графики достаточно открыть страницу локально и проверить основные браузеры проекта. Для приложений нужно проверить экран, где ассет используется. Для документации стоит оценить читаемость текста на скриншотах после вставки в итоговую страницу.
Когда выбирать ZopfliPNG
ZopfliPNG стоит использовать, когда:
нужен именно PNG, а не WebP, AVIF или JPEG;
важен минимальный размер статичного PNG;
допустима долгая обработка;
удобно работать через терминал;
нужен запуск в скрипте или сборке;
нужно сохранить обычную PNG-совместимость.
ZopfliPNG не стоит выбирать, когда:
нужен графический интерфейс;
требуется массовая быстрая обработка большого каталога;
нужно редактировать изображение;
требуется конвертация между форматами;
нельзя удалять служебные chunks;
исходные 16-битные данные нельзя переводить в 8 бит;
процесс сжатия должен выполняться на лету.
FAQ
ZopfliPNG сжимает PNG без потери качества?
В базовом сценарии ZopfliPNG оптимизирует PNG без изменения видимых пикселей. Отдельные параметры требуют осторожности: --lossy_transparent удаляет скрытые цвета у полностью прозрачных пикселей, а --lossy_8bit переводит 16-битные каналы в 8 бит. Первый режим не меняет вид полностью прозрачных областей, второй меняет техническую глубину цвета.
Чем zopflipng отличается от Zopfli?
Zopfli — библиотека и набор компонентов для Deflate/gzip/zlib-сжатия. zopflipng — отдельная команда для оптимизации PNG. В статье рассматривается именно zopflipng, потому что пользователь работает с PNG-файлами, а не с общим Deflate-потоком.
Почему ZopfliPNG работает медленно?
Zopfli использует более тщательные техники сжатия. Это даёт меньший размер, но увеличивает время сжатия. Для ZopfliPNG характерен высокий расход CPU-времени по сравнению с быстрыми PNG-оптимизаторами.
Можно ли обработать папку PNG?
Да. Для нескольких файлов используется --prefix:
zopflipng --prefix=zopfli_ *.pngКоманда создаёт оптимизированные копии с префиксом и удобна при работе с маской *.png.
Можно ли сохранить metadata chunks?
Да. Для этого используется --keepchunks:
zopflipng --keepchunks=gAMA,pHYs input.png output.pngПо умолчанию ZopfliPNG сохраняет IHDR, PLTE, tRNS, IDAT и IEND, а дополнительные chunks удаляет.
Что лучше: ZopfliPNG, OptiPNG или Oxipng?
Для финального уменьшения ограниченного набора PNG подходит ZopfliPNG. Для более привычной lossless-оптимизации можно использовать OptiPNG. Для больших каталогов и регулярных сборок часто удобнее Oxipng, потому что он многопоточный и ориентирован на быстрый CLI-процесс.
Подходит ли ZopfliPNG для WebP?
Нет. ZopfliPNG оптимизирует PNG. Основной алгоритм ZopfliPNG портирован из WebP lossless, но программа не является WebP-конвертером и не создаёт WebP-файлы.
Что делать, если итоговый файл стал больше?
Сначала сравнить обычный запуск, -m, другой набор --filters и сохранение chunks. Если выходной файл уже существует и он меньше нового результата, ZopfliPNG не перезаписывает его как результат предыдущего запуска. Для реальной оптимизации не стоит использовать --always_zopflify, потому что этот параметр принудительно выводит Zopfli-encoded image даже тогда, когда он больше исходника, и нужен для бенчмарков.
Итоговые рекомендации
ZopfliPNG лучше всего раскрывается как финальный PNG-оптимизатор. Для одного файла достаточно базовой команды с отдельным выходным именем. Для статичных ассетов стоит использовать -m и проверять размер результата. Для набора PNG безопаснее запускать --prefix, чтобы сохранить исходники. Для изображений с важными metadata chunks нужно добавлять --keepchunks.
Для новичка главный ориентир — не перезаписывать исходники и не включать агрессивные параметры сразу. Для разработчика сайта ZopfliPNG полезен как последний этап перед публикацией. Для регулярной сборки большого проекта стоит сравнить его с Oxipng. Для сильного уменьшения размера с допустимым изменением цветового представления можно рассмотреть pngquant, но это уже другой тип компрессии.
ZopfliPNG — узкий инструмент, и именно в этом его преимущество: он не пытается заменить редактор изображений, просмотрщик или конвертер. Его задача — взять готовый PNG и сделать файл меньше, сохранив совместимость с обычным PNG-отображением.
Список изменений
Появление Zopfli:
- Zopfli появился как открытая реализация Deflate-сжатия, ориентированная на меньший размер результата по сравнению с прежними техниками. Google представила Zopfli в феврале 2013 года. Идея состояла в том, чтобы тратить больше времени на сжатие, но не замедлять распаковку: меньший сжатый размер помогает передаче данных и хранению, а совместимость с Deflate сохраняется.
- Zopfli был создан Lode Vandevenne и Jyrki Alakuijala на основе алгоритма Jyrki Alakuijala. Проект написан на C, а код размещён под Apache-2.0.
Появление ZopfliPNG:
- ZopfliPNG возник как PNG-оптимизатор внутри проекта Zopfli. Его README описывает программу как Portable Network Graphics image optimizer и перечисляет ключевые возможности: Zopfli compression для Deflate, сравнение scanline filter strategies, выбор подходящего color type, удаление chunks, необязательная очистка скрытых цветов полностью прозрачных пикселей и необязательное преобразование 16-битных каналов в 8-битные.
- Раннее описание ZopfliPNG фиксировало статус alpha-release для тестирования и дальнейших улучшений. Особенно упоминалась работа над palette selection.
Развитие релизов:
- В истории релизов проекта Zopfli видны выпуски zopfli-1.0.1 , zopfli-1.0.2 и zopfli-1.0.3 . Релиз zopfli-1.0.2 опубликован 18 мая, а запись для него содержит обновление Makefile до 1.0.2. Релиз zopfli-1.0.3 опубликован 27 ноября 2019 года.
- Man page для zopflipng указывает zopflipng 1.0.3 и дату November 2019.
Архивирование репозитория:
- Репозиторий google/zopfli переведён в read-only 14 октября 2025 года. Это не меняет назначение ZopfliPNG как инструмента, но важно для оценки развития: основная ветка Google больше не является активной площадкой изменений.
- Практическое следствие для пользователя простое: ZopfliPNG остаётся пригодным для сжатия PNG, потому что формат PNG и Deflate-совместимость не зависят от частых обновлений интерфейса. Но ждать появления графической оболочки, новых режимов и активного развития именно в основном репозитории Google не стоит.


Оставте свой отзыв о Zopflipng