ZopfliPNG — консольная программа для оптимизации PNG-файлов, построенная вокруг алгоритма Zopfli. Её основная задача — взять готовый PNG, заново подобрать более выгодное внутреннее представление и записать файл меньшего размера, сохранив совместимость с обычными просмотрщиками, браузерами, CMS, игровыми движками и любыми инструментами, которые читают стандартный PNG. Программа работает не как редактор изображений, а как финальный PNG optimizer: она не рисует, не масштабирует, не кадрирует и не заменяет графический редактор. Её место — последний этап подготовки ассетов, скриншотов, иконок, интерфейсной графики и веб-изображений.
ZopfliPNG использует Zopfli-сжатие для Deflate-части PNG, перебирает стратегии фильтрации строк, выбирает подходящий цветовой тип, удаляет лишние для веб-сценариев служебные PNG-чанки, умеет менять скрытые цвета полностью прозрачных пикселей и при необходимости переводить 16-битные каналы в 8-битные. Это делает программу не универсальным инструментом на все случаи, а узким решением для тех ситуаций, когда нужен максимально плотный PNG без перехода в WebP, AVIF или другой формат.
Скачать Zopflipng
- Ретушь фото
- Русский интерфейс
- Просто для новичков
- Только командная строка
- Не для ретуши фото
- Медленное PNG-сжатие
Важная особенность ZopfliPNG — отсутствие графического интерфейса. У программы нет кнопок Open, Save, Optimize, Compress, ползунка качества или панели предпросмотра. Её интерфейс — это команда zopflipng, набор опций и текстовый вывод в терминале: Optimizing, Input size, Result size, Percentage of original, Result is smaller, Preserving original PNG since it was smaller. Поэтому точные элементы управления здесь — не кнопки, а флаги командной строки: -m, -q, -y, --prefix, --iterations, --filters, --keepchunks, --lossy_transparent, --lossy_8bit, --keepcolortype, --always_zopflify и -d.

На скриншоте видно типичный сценарий работы: сначала выводится справка по параметрам, затем запускается оптимизация файла и показывается результат: входной размер, итоговый размер и процент от оригинала. Это и есть основной экран ZopfliPNG: пользователь управляет программой через аргументы команды, а результат оценивает по строкам консольного вывода.
Для чего нужна ZopfliPNG
ZopfliPNG нужна там, где PNG уже выбран как конечный формат, а задача состоит не в изменении картинки, а в уменьшении веса файла. Типичный пример — сайт, приложение или игра уже используют PNG из-за прозрачности, чётких краёв, пиксельной графики, UI-элементов или требований к совместимости. В такой ситуации переход в JPEG невозможен из-за потери прозрачности и артефактов, а переход в WebP или AVIF может быть нежелателен из-за пайплайна, требований платформы или необходимости оставить именно .png.
Программа особенно хорошо вписывается в такие задачи:
-
финальная оптимизация PNG перед публикацией сайта;
-
уменьшение веса иконок, пиктограмм, логотипов и UI-графики;
-
подготовка PNG-ассетов для веб-игр и 2D-проектов;
-
сжатие скриншотов интерфейсов;
-
оптимизация изображений в репозитории перед релизом;
-
автоматическая обработка PNG в build-скриптах;
-
проверка, насколько далеко можно ужать PNG без смены формата;
-
подготовка статичных ресурсов, которые будут скачиваться много раз.
ZopfliPNG не стоит воспринимать как программу для быстрой массовой обработки на лету. Она специально делает ставку на плотность сжатия, а не на скорость. Смысл ZopfliPNG — потратить больше CPU-времени один раз, чтобы затем много раз отдавать пользователям меньший файл. Поэтому она уместна в финальном этапе сборки, но не идеальна для интерактивной обработки сотен изображений прямо во время работы дизайнера.
Как ZopfliPNG оптимизирует PNG
PNG-файл хранит изображение не просто как набор пикселей. Внутри есть структура чанков, данные изображения, Deflate-сжатие и фильтры строк. ZopfliPNG работает именно с этой внутренней упаковкой: декодирует PNG, анализирует изображение, подбирает более выгодное представление и заново записывает файл.
Главные направления оптимизации:
| Направление | Что делает ZopfliPNG | Что получает пользователь |
|---|---|---|
| Deflate-сжатие | Использует Zopfli вместо обычного zlib-подхода | Более плотный IDAT-поток |
| PNG-фильтры | Пробует разные стратегии фильтрации строк | Меньше данных перед Deflate-сжатием |
| Цветовой тип | Подбирает подходящий тип хранения цвета | Возможность уменьшить файл без визуальных изменений |
| Чанки | Удаляет необязательные метаданные | Меньше служебного веса |
| Прозрачность | Может очистить скрытые RGB-значения у полностью прозрачных пикселей | Дополнительное уменьшение веса без видимой разницы |
| 16 бит → 8 бит | Может преобразовать 16-битные каналы в 8-битные | Меньше файл, но это уже не строго lossless по данным |
В обычном lossless-сценарии ZopfliPNG сохраняет изображение визуально тем же самым и не меняет размеры. Она не уменьшает ширину и высоту, не добавляет размытие, не делает JPEG-подобную компрессию и не портит края. Экономия достигается за счёт более эффективной внутренней упаковки PNG.
Однако не все параметры одинаково безопасны с точки зрения исходных данных. Например, --lossy_transparent не меняет видимую картинку, потому что работает с RGB-значениями пикселей, у которых альфа равна нулю. Такие пиксели полностью прозрачны, и их цвет не виден при обычном отображении. Но технически данные внутри файла меняются. Параметр --lossy_8bit ещё заметнее: он переводит 16-битный канал в 8-битный, поэтому его нельзя считать строгим lossless-преобразованием по исходным числовым значениям.
Что именно можно сделать в ZopfliPNG
ZopfliPNG выполняет конкретный набор задач. В ней нет редактирования, но есть несколько рабочих режимов оптимизации.
Оптимизировать один PNG-файл
Базовый сценарий выглядит так:
zopflipng input.png output.png
Команда берёт input.png, оптимизирует его и записывает результат в output.png. В консоли появляются строки:
Optimizing input.pngInput size: ...Result size: ...Percentage of original: ...Result is smaller
Если результат оказался больше исходника, ZopfliPNG не ведёт себя агрессивно. Она умеет сохранить оригинальный PNG, когда новая версия не даёт выигрыша. Это важное поведение: оптимизация не должна делать файл тяжелее только потому, что команда была запущена.
Включить более сильное сжатие через -m
Флаг -m означает compress more. Он увеличивает число итераций и заставляет ZopfliPNG потратить больше времени на поиск более компактного результата:
zopflipng -m input.png output.png
Этот режим полезен для финального релиза, когда скорость обработки не критична. Например, для набора иконок сайта, ассетов игры или графики интерфейса можно запустить -m перед публикацией. Для черновой обработки он часто избыточен: выигрыш может быть небольшим, а время заметно больше.
Использовать быстрый режим -q
Флаг -q включает быстрый, но менее тщательный режим:
zopflipng -q input.png output.png
В этом режиме ZopfliPNG подходит для предварительной проверки: стоит ли вообще пытаться оптимизировать набор файлов, какие изображения дают заметный выигрыш, где экономия минимальна. Быстрый режим не является главным преимуществом программы. Он нужен как практичный компромисс, когда полный перебор слишком долгий.
Перезаписывать файл без вопроса через -y
Если выходной файл уже существует, ZopfliPNG может спросить:
File output.png exists, overwrite? (y/N)
Флаг -y отключает этот интерактивный вопрос:
zopflipng -y input.png output.png
Это важный параметр для скриптов, CI/CD и пакетной обработки. Без него автоматизация может остановиться на запросе подтверждения. С ним программа работает предсказуемо и не ждёт ввода с клавиатуры.
Обрабатывать несколько файлов через --prefix
Для пакетной оптимизации ZopfliPNG использует не список пар вход-выход, а префикс:
zopflipng --prefix=optimized_ icon.png logo.png screenshot.png
В результате программа создаёт файлы:
optimized_icon.pngoptimized_logo.pngoptimized_screenshot.png
Если указать --prefix без значения, используется префикс zopfli_. Этот режим удобен тем, что исходники остаются рядом, а результат легко отличить по имени. Также ZopfliPNG пропускает файлы, которые уже начинаются с заданного префикса, чтобы при повторном запуске не получить цепочку вроде zopfli_zopfli_zopfli_icon.png.
Сделать dry run через -d
Флаг -d запускает сухой прогон:
zopflipng -d input.png output.png
Файлы не записываются, но консоль показывает, что получилось бы при оптимизации. Это полезно для бенчмарков, сравнения параметров и проверки набора изображений перед тем, как реально менять файлы.
Практический сценарий:
zopflipng -d -m input.png output.png
Так можно понять, стоит ли режим -m дополнительного времени именно для этого PNG.
Принудительно сохранять результат Zopfli через --always_zopflify
Параметр:
zopflipng --always_zopflify input.png output.png
заставляет программу записать результат, даже если он больше оригинала. Для реальной оптимизации это плохой режим: пользователь может получить файл тяжелее исходного. Его смысл — тестирование и сравнение алгоритма. В обычном рабочем процессе этот параметр лучше не использовать.
Сохранять важные PNG-чанки через --keepchunks
По умолчанию ZopfliPNG удаляет необязательные чанки, чтобы уменьшить файл. Для веб-графики это часто правильно: текстовые комментарии, часть метаданных и прочая служебная информация не влияют на внешний вид изображения в браузере. Но иногда некоторые чанки важны: например, цветовой профиль, гамма, DPI или текстовая информация.
Команда для сохранения выбранных чанков:
zopflipng --keepchunks=iCCP,sRGB input.png output.png
Другой пример:
zopflipng --keepchunks=gAMA,pHYs input.png output.png
Важно понимать цену: каждый сохранённый чанк увеличивает итоговый размер. Кроме того, сохранение некоторых чанков может ограничить выбор цветового типа и ухудшить сжатие. По умолчанию программа оставляет только критически важные элементы PNG: IHDR, PLTE, tRNS, IDAT и IEND.
Сохранить исходный цветовой тип через --keepcolortype
Обычно ZopfliPNG может выбрать более компактный цветовой тип. Например, если RGBA-изображение фактически содержит только оттенки серого с альфой, программа может записать его эффективнее. Но иногда нужно сохранить исходный тип: RGB, RGBA, grayscale, grayscale+alpha или palette.
Для этого используется:
zopflipng --keepcolortype input.png output.png
Этот параметр снижает пространство для оптимизации. Его стоит применять не на всякий случай, а когда есть конкретная причина: старое устройство, нестандартный декодер, внутренний пайплайн, тесты, которые ожидают определённый тип PNG.
Очистить скрытые цвета прозрачных пикселей через --lossy_transparent
Команда:
zopflipng --lossy_transparent input.png output.png
удаляет или нормализует RGB-значения у пикселей с альфа-каналом 0. Визуально картинка остаётся прежней: полностью прозрачный пиксель не виден. Но внутри файла его RGB-значения могут мешать сжатию, потому что создают лишнее разнообразие данных.
Этот параметр особенно полезен для:
-
PNG-иконок с прозрачным фоном;
-
UI-элементов;
-
спрайтов;
-
вырезанных объектов;
-
картинок, экспортированных из графических редакторов с мусорными цветами под прозрачностью.
Но использовать его нужно осознанно. Если приложение потом анализирует скрытые RGB-значения прозрачных пикселей как данные, параметр не подходит. Для обычного веб-отображения это почти никогда не проблема, но для технических карт, масок и нестандартных пайплайнов такие скрытые значения могут иметь смысл.
Перевести 16-битное изображение в 8-битное через --lossy_8bit
Параметр:
zopflipng --lossy_8bit input.png output.png
конвертирует 16-битные каналы в 8-битные. Это может значительно уменьшить размер, но уже меняет точность данных. Для веб-графики, иконок и обычных UI-изображений 8 бит на канал часто достаточно. Для медицинских изображений, scientific data, карт высот, HDR-пайплайнов или технических текстур такой параметр может быть недопустим.
--lossy_8bit лучше воспринимать как отдельный режим, а не как стандартную PNG оптимизацию без потерь.
Управлять числом итераций через --iterations
Команда:
zopflipng --iterations=50 input.png output.png
задаёт количество итераций сжатия. Больше итераций обычно означает больше времени и шанс получить чуть меньший файл. Но зависимость не линейная: после некоторого уровня дополнительные итерации могут дать очень маленький выигрыш.
Для практики удобно разделить режимы так:
| Сценарий | Команда | Логика |
|---|---|---|
| Быстрая проверка | zopflipng -q input.png output.png |
Понять потенциал оптимизации |
| Обычная финальная обработка | zopflipng input.png output.png |
Хороший баланс |
| Более сильное сжатие | zopflipng -m input.png output.png |
Дольше, но тщательнее |
| Экстремальный прогон | zopflipng --iterations=500 --filters=01234mepb input.png output.png |
Для единичных файлов и тестов |
Управлять фильтрами через --filters
PNG использует фильтры строк, которые подготавливают данные перед Deflate-сжатием. ZopfliPNG умеет пробовать разные стратегии:
zopflipng --filters=0me input.png output.png
Доступные обозначения:
| Значение | Смысл |
|---|---|
0 |
filter type 0 |
1 |
filter type 1 |
2 |
filter type 2 |
3 |
filter type 3 |
4 |
filter type 4 |
m |
minimum sum |
e |
entropy |
p |
predefined, сохранение стратегии из входного PNG |
b |
brute force, экспериментальный вариант |
В качестве хорошего набора для проверки часто используют --filters=0me. Полный перебор --filters=01234mepb может дать результат меньше, но стоит дороже по времени.
Интерфейс программы: что видит пользователь
Так как ZopfliPNG — CLI-утилита, весь интерфейс состоит из трёх частей:
-
строка команды;
-
параметры;
-
консольный вывод.
Типичный запуск:
zopflipng -m --lossy_transparent icon.png icon.optimized.png
Типичный вывод:
Optimizing icon.pngInput size: 24576 (24K)Result size: 19840 (19K). Percentage of original: 80.729%Result is smaller
Каждая строка имеет практический смысл:
| Строка | Что означает |
|---|---|
Optimizing icon.png |
Программа начала обработку конкретного файла |
Input size |
Размер исходного PNG |
Result size |
Размер нового PNG |
Percentage of original |
Сколько процентов от оригинала занимает результат |
Result is smaller |
Новый файл действительно меньше |
Preserving original PNG since it was smaller |
Оптимизация не дала выигрыша, оригинал сохранён |
File ... exists, overwrite? (y/N) |
Выходной файл уже существует, требуется подтверждение |
No files were written because dry run was specified |
Запуск был тестовым через -d |
Это сухой, но удобный интерфейс для автоматизации. В графической программе пользователь смотрел бы на индикатор прогресса и кнопку сохранения. В ZopfliPNG вместо этого он получает точные числа, которые легко записывать в лог, сравнивать и использовать в скриптах.
Практическая оптимизация одного файла
Самый простой рабочий пример:
zopflipng source.png result.png
После выполнения нужно сравнить размер:
ls -lh source.png result.png
Если результат меньше, result.png можно использовать в проекте. Если результат не меньше, ZopfliPNG сама сообщит, что оригинал оказался выгоднее. Это важно: некоторые PNG уже хорошо оптимизированы другими инструментами, и повторная обработка не обязана улучшать результат.
Более тщательный вариант:
zopflipng -m source.png result.png
Вариант с обработкой прозрачности:
zopflipng -m --lossy_transparent source.png result.png
Вариант для сохранения цветового профиля:
zopflipng -m --keepchunks=iCCP,sRGB source.png result.png
Вариант для строгого сохранения цветового типа:
zopflipng -m --keepcolortype source.png result.png
Для веб-графики чаще всего подходят две команды:
zopflipng source.png result.png
или:
zopflipng -m --lossy_transparent source.png result.png
Первая — максимально безопасная. Вторая — практичная для PNG с прозрачностью, если скрытые цвета прозрачных пикселей не используются как данные.
Практическая пакетная обработка
Для набора файлов удобнее использовать --prefix:
zopflipng --prefix=opt_ *.png
Результат:
icon.png -> opt_icon.pnglogo.png -> opt_logo.pngsprite.png -> opt_sprite.pngbanner.png -> opt_banner.png
Если нужно применить более сильное сжатие:
zopflipng -m --prefix=opt_ *.png
Если нужно обработать PNG с прозрачностью:
zopflipng -m --lossy_transparent --prefix=opt_ *.png
Если нужно сначала посмотреть результат без записи:
zopflipng -d -m --prefix=opt_ *.png
Для повторяемой работы лучше не оптимизировать оригиналы напрямую. Практичнее держать исходники отдельно, а оптимизированные файлы складывать в папку сборки:
zopflipng -m --prefix=dist/ assets/*.png
Здесь dist/ работает как часть префикса. Выходные имена формируются автоматически, а исходники остаются нетронутыми.
Реальный пример результата после обработки
Ниже пример PNG-файла, уменьшенного с помощью команды zopflipng --lossy_8bit --lossy_transparent -m in.png out.png. Это не окно программы, а показательный результат её применения к простой палитровой графике.
![]()
Этот пример хорошо показывает, почему ZopfliPNG особенно полезна на простых изображениях с ограниченной палитрой, резкими областями цвета и прозрачностью. Такие PNG часто содержат много повторяющихся данных, и правильный выбор фильтров, цветового типа и Deflate-представления может дать большой выигрыш.
Но по одному примеру нельзя делать универсальный вывод, что каждый PNG уменьшится в десять раз. Результат зависит от того, как файл был создан. Если PNG уже прошёл через сильный оптимизатор, выигрыш может быть долями процента. Если файл экспортирован тяжёлым графическим редактором с лишними метаданными, неоптимальным цветовым типом и неудачным Deflate, экономия может быть заметной.
Работа с метаданными и чанками
PNG состоит из чанков. Некоторые из них критичны: без них файл не будет корректным PNG. Другие необязательны: они могут хранить текстовые комментарии, цветовые профили, гамму, физические размеры, дату, авторские данные и прочую служебную информацию.
ZopfliPNG по умолчанию удаляет необязательные чанки, потому что они увеличивают размер. Для веб-страницы это обычно правильно: браузеру часто не нужны комментарии, внутренние заметки редактора или технические метаданные.
Но есть сценарии, где удаление чанков может быть нежелательным:
-
изображение должно сохранить цветовой профиль;
-
важна гамма;
-
файл используется в печатном пайплайне;
-
DPI имеет значение для внешней системы;
-
PNG содержит текстовые данные, которые нужны приложению;
-
тесты сравнивают не только пиксели, но и структуру файла;
-
изображение хранит техническую информацию в дополнительных чанках.
Для таких случаев используется:
zopflipng --keepchunks=gAMA,pHYs source.png result.png
или:
zopflipng --keepchunks=iCCP,sRGB source.png result.png
Практическое правило простое: для обычного сайта лучше начинать без --keepchunks, а для дизайн-систем, печати и цветочувствительной графики — явно сохранять нужные чанки.
Lossless и lossy-режимы в ZopfliPNG
В обзорах PNG-оптимизаторов часто пишут без потерь, но для ZopfliPNG нужно разделять режимы.
Строгая оптимизация без потерь
Команда:
zopflipng input.png output.png
оптимизирует файл без намеренного изменения видимых пикселей. Это базовый режим, который подходит для большинства задач. Программа может менять способ хранения, фильтры, Deflate-представление и служебные данные, но изображение при обычном отображении остаётся тем же.
Видимо без потерь, но с изменением скрытых данных
Команда:
zopflipng --lossy_transparent input.png output.png
меняет скрытые цвета полностью прозрачных пикселей. Видимой разницы нет, потому что такие пиксели не отображаются. Но если сравнивать исходные RGBA-значения побайтно, файл уже не идентичен по данным.
Это хороший режим для веба, иконок, игровых спрайтов и UI-графики. Он плох для случаев, где прозрачные пиксели используются как контейнер скрытых данных.
Потеря точности цвета
Команда:
zopflipng --lossy_8bit input.png output.png
может уменьшить файл сильнее, но переводит 16-битные каналы в 8-битные. Для обычной веб-графики это часто приемлемо. Для профессиональной графики, научных изображений и карт данных — нет.
Лучшие практические команды
Безопасная команда для большинства PNG
zopflipng input.png output.png
Используется, когда нужно аккуратно уменьшить файл без дополнительных спорных преобразований.
Более сильная оптимизация для релиза
zopflipng -m input.png output.png
Подходит для финальной сборки, где важен минимальный размер.
Оптимизация PNG с прозрачностью
zopflipng -m --lossy_transparent input.png output.png
Практичный режим для иконок, UI-графики, спрайтов и вырезанных объектов.
Сохранение профиля и sRGB
zopflipng -m --keepchunks=iCCP,sRGB input.png output.png
Подходит, когда важно не потерять цветовую информацию.
Полный тяжёлый прогон
zopflipng --iterations=500 --filters=01234mepb --lossy_transparent input.png output.png
Используется для единичных важных файлов, где можно ждать дольше ради минимального размера.
Быстрая проверка
zopflipng -q input.png output.png
Подходит для грубой оценки.
Тест без записи
zopflipng -d -m input.png output.png
Удобно для бенчмарка.
Как читать результат оптимизации
После выполнения ZopfliPNG важно не просто смотреть на было и стало, а понимать, что означает каждая строка.
Пример:
Optimizing banner.pngInput size: 130432 (127K)Result size: 105074 (102K). Percentage of original: 80.558%Result is smaller
Здесь видно:
-
исходный файл весил 130432 байта;
-
оптимизированный — 105074 байта;
-
результат составляет 80,558% от оригинала;
-
экономия — примерно 19,442%;
-
новый файл меньше и его можно использовать.
Другой пример:
Input size: 89420 (87K)Result size: 90361 (88K). Percentage of original: 101.052%Preserving original PNG since it was smaller
Здесь ZopfliPNG нашла вариант больше оригинала. Это нормальная ситуация: не каждый PNG можно улучшить. Значит, исходник уже хорошо оптимизирован или конкретное изображение плохо поддаётся дополнительному сжатию. Программа не должна ухудшать результат в рабочем режиме, поэтому сохраняет исходный файл.
Если используется --always_zopflify, защита отключается. Это нужно только для тестов.
Где ZopfliPNG особенно эффективна
ZopfliPNG лучше всего проявляет себя на PNG, где есть пространство для внутренней оптимизации:
-
скриншоты интерфейсов;
-
изображения с большими однотонными областями;
-
иконки;
-
простые иллюстрации;
-
UI-элементы;
-
изображения с прозрачностью;
-
графика, экспортированная из редакторов без дополнительной оптимизации;
-
PNG с лишними метаданными;
-
файлы с неоптимальным цветовым типом;
-
ассеты, которые долго хранятся и много раз отдаются пользователям.
На фотографиях эффект может быть менее впечатляющим. PNG вообще не лучший формат для фотографий: он хранит их без потерь и часто получается слишком тяжёлым. Если изображение — фотография без прозрачности, обычно логичнее рассматривать JPEG, WebP или AVIF. Но если по требованиям нужен именно PNG, ZopfliPNG всё равно может помочь.
Где ZopfliPNG не стоит использовать
Есть ситуации, где программа не является лучшим выбором:
| Ситуация | Почему ZopfliPNG не идеальна |
|---|---|
| Нужно быстро обработать тысячи файлов интерактивно | Программа медленная по природе |
| Нужен визуальный предпросмотр | У ZopfliPNG нет GUI |
| Нужно менять размер изображения | Программа не ресайзер |
| Нужно конвертировать PNG в WebP/AVIF | ZopfliPNG не меняет формат |
| Нужно сжимать JPEG | Утилита работает с PNG |
| Нужна настройка визуального качества | Основной режим не про quality slider |
| Изображения уже оптимизированы PNGOUT/OxiPNG/OptiPNG | Выигрыш может быть минимальным |
| Важны все метаданные | Нужно явно использовать --keepchunks |
| Важны скрытые RGB-данные прозрачных пикселей | Не использовать --lossy_transparent |
ZopfliPNG — не ускоритель всех картинок. Это точный инструмент для PNG. Он хорош, когда задача сформулирована правильно: уменьшить размер PNG, сохранив формат и совместимость.
Сравнение с аналогами
ZopfliPNG логично сравнивать не с Photoshop, GIMP или онлайн-компрессорами, а с реальными PNG-оптимизаторами: OptiPNG, pngcrush, PNGOUT, OxiPNG и pngquant. Все они решают близкие задачи, но делают это по-разному.
OptiPNG
OptiPNG — PNG optimizer, который пересжимает PNG без потери информации, а также умеет работать с рядом входных форматов и преобразовывать их в оптимизированный PNG. ZopfliPNG уже. Она не делает упор на конвертацию внешних форматов и не выступает как инструмент восстановления. Её сильная сторона — Deflate через Zopfli и тщательная оптимизация именно PNG.
| Критерий | ZopfliPNG | OptiPNG |
|---|---|---|
| Главная цель | Максимально плотный PNG | Универсальная lossless-оптимизация PNG |
| Скорость | Обычно медленнее | Обычно практичнее для массовой обработки |
| Конвертация внешних форматов | Нет как ключевой функции | Есть для ряда форматов |
| Уровни оптимизации | Через -m, --iterations, --filters |
Через уровни оптимизации и zlib-параметры |
| Метаданные | Удаляются по умолчанию, можно сохранить | Можно управлять удалением |
| Лучший сценарий | Финальная минимизация PNG | Регулярная пакетная оптимизация |
OptiPNG удобнее как повседневная утилита. ZopfliPNG сильнее как финальный дожим, когда файл уже готов и нужно выжать дополнительные проценты.
pngcrush
pngcrush оптимизирует PNG, пробуя разные уровни сжатия и PNG filter methods, а также умеет удалять нежелательные ancillary chunks или добавлять служебные чанки. ZopfliPNG похожа на pngcrush тем, что тоже работает с фильтрами и чанками. Но подход ZopfliPNG сильнее завязан на Zopfli Deflate и более дорогой поиск компактного результата.
| Критерий | ZopfliPNG | pngcrush |
|---|---|---|
| Формат | PNG | PNG |
| Работа с фильтрами | Да, через --filters |
Да, через подбор методов |
| Работа с чанками | Да, через --keepchunks |
Да, удаление и добавление |
| Скорость | Медленная при сильных настройках | Может быть быстрее в обычных режимах |
| Удобство тонкой настройки | Хорошее, но CLI-ориентированное | Очень широкая настройка |
| Роль в пайплайне | Финальный максимальный прогон | Диагностика, чистка, подбор параметров |
pngcrush хорош, когда нужно не только сжать, но и детально управлять структурой PNG. ZopfliPNG лучше, когда задача проще: взять файл и получить максимально компактный итоговый PNG.
PNGOUT
PNGOUT — известный командный PNG-оптимизатор. Он силён в ручной PNG-компрессии и даёт пользователю детальный контроль над параметрами. ZopfliPNG выигрывает в простоте запуска: базовая команда уже делает автоматический подбор. PNGOUT силён как старый и мощный оптимизатор, но его ручные параметры требуют больше опыта.
| Критерий | ZopfliPNG | PNGOUT |
|---|---|---|
| Главный плюс | Простая команда и сильный Zopfli Deflate | Очень сильная ручная PNG-компрессия |
| Автоматизация | Удобный --prefix, защита от ухудшения |
Больше ручного подбора |
| Настройка | --filters, --iterations, --keepchunks |
Набор собственных параметров для цвета, фильтров и сжатия |
| Порог входа | Ниже | Выше |
| Лучший сценарий | Финальный прогон в скрипте | Ручная точная оптимизация отдельных файлов |
Если нужно быстро внедрить PNG оптимизацию в сборку, ZopfliPNG обычно проще. Если специалист готов вручную подбирать параметры, PNGOUT остаётся сильным конкурентом.
OxiPNG
OxiPNG — современный многопоточный PNG optimizer на Rust. У него есть режимы для оптимизации прозрачности, управления метаданными, перебора фильтров и использования разных уровней сжатия. OxiPNG практичнее для массовой обработки, особенно когда важна скорость и удобный современный CLI. ZopfliPNG интереснее, когда нужен именно классический ZopfliPNG-подход и контроль через его параметры.
| Критерий | ZopfliPNG | OxiPNG |
|---|---|---|
| Реализация | C/C++-утилита вокруг ZopfliPNG | Rust-оптимизатор |
| Производительность | Медленная при максимальных режимах | Обычно удобнее для массовой обработки |
| Прозрачность | --lossy_transparent |
Оптимизация прозрачных пикселей отдельной опцией |
| Zopfli | Основная идея программы | Может использоваться как один из вариантов сжатия |
| Подход | Тщательный финальный прогон | Практичная современная оптимизация |
| Лучший сценарий | Дожим отдельных PNG | Большие наборы PNG в проекте |
Для ежедневной обработки большого каталога OxiPNG часто удобнее. Для финального минимального размера ZopfliPNG остаётся полезным инструментом.
pngquant
pngquant отличается принципиально. Он уменьшает PNG за счёт квантизации цвета, то есть переводит изображение к палитровому представлению с меньшим количеством цветов. Это может дать огромную экономию, но такой подход уже не является строгой lossless-оптимизацией исходных цветов.
ZopfliPNG не заменяет pngquant. Эти инструменты часто используют в цепочке:
pngquant --quality 80-100 input.png --output reduced.pngzopflipng -m --lossy_transparent reduced.png final.png
Смысл такой: pngquant уменьшает цветовое пространство, а ZopfliPNG потом дожимает получившийся PNG. Но если требуется сохранить каждый исходный цвет точно, pngquant не подходит, а ZopfliPNG подходит.
| Критерий | ZopfliPNG | pngquant |
|---|---|---|
| Тип оптимизации | Внутренняя PNG/Deflate-оптимизация | Квантизация цветов |
| Потери | В базовом режиме без видимых потерь | Может менять цвета |
| Лучший результат | На уже готовом PNG | На сложных RGBA-изображениях, где допустима палитра |
| Роль | Финальный дожим | Предварительное уменьшение цветности |
| Совместное использование | Да | Да |
Сводная таблица сравнения
| Программа | Лучше всего подходит для | Главный плюс | Главный минус |
|---|---|---|---|
| ZopfliPNG | Финальный дожим PNG | Очень плотное Deflate-сжатие | Медленная работа |
| OptiPNG | Повседневная lossless-оптимизация | Удобный баланс скорости и результата | Не всегда даёт максимальный размер |
| pngcrush | Подбор фильтров и работа с чанками | Гибкость | Много параметров |
| PNGOUT | Ручная сильная PNG-компрессия | Очень хороший результат на отдельных файлах | Больше ручной настройки |
| OxiPNG | Массовая современная оптимизация | Скорость, удобство, многопоточность | Не всегда выигрывает у тяжёлого Zopfli-подхода |
| pngquant | Сильное уменьшение RGBA PNG | Большая экономия | Не строгий lossless по цветам |
ZopfliPNG не обязана быть единственной программой в пайплайне. Самый практичный подход — использовать её как последний этап. Например, сначала изображение экспортируется из редактора, затем при необходимости проходит через pngquant или другой оптимизатор, а финальный PNG дожимается через ZopfliPNG.
Интеграция в графические рабочие процессы
Хотя сама ZopfliPNG не имеет GUI, Zopfli как технология встречается внутри графических оптимизаторов. На скриншоте ImageOptim видно, что Zopfli указан среди используемых компонентов рядом с OxiPNG, pngquant, PNGCrush, MozJPEG, AdvPNG и другими инструментами. Это пример того, как консольные оптимизаторы становятся частью графического workflow.

Для пользователя это означает простую вещь: ZopfliPNG можно применять напрямую через терминал, а можно встроить в более крупный процесс. В профессиональной работе чаще встречается второй вариант: дизайнеры экспортируют PNG, разработчики или сборочная система автоматически оптимизируют ассеты, а в репозиторий или релиз попадает уже уменьшенный файл.
Интеграция в сборку сайта
ZopfliPNG хорошо подходит для статичных сайтов, где PNG лежат в папке assets, images, public, static или dist.
Пример ручной обработки:
zopflipng -m --lossy_transparent assets/logo.png public/logo.png
Пример пакетной обработки:
zopflipng -m --lossy_transparent --prefix=public/ assets/*.png
Но у такого варианта есть ограничение: --prefix=public/ формирует имена с префиксом, а не повторяет сложную структуру вложенных папок. Для серьёзного проекта удобнее использовать shell-скрипт.
Пример:
mkdir -p dist/imagesfor file in assets/images/*.png; do name=$(basename "$file") zopflipng -m --lossy_transparent "$file" "dist/images/$name"done
Такой скрипт:
-
берёт все PNG из
assets/images; -
сохраняет имена файлов;
-
кладёт результат в
dist/images; -
применяет сильное сжатие;
-
очищает скрытые цвета прозрачных пикселей.
Для строгого lossless-режима нужно убрать --lossy_transparent:
for file in assets/images/*.png; do name=$(basename "$file") zopflipng -m "$file" "dist/images/$name"done
Интеграция в CI/CD
ZopfliPNG особенно логична в CI/CD, потому что медленное сжатие можно выполнять не на компьютере дизайнера, а в сборочной среде. Например, при подготовке релиза pipeline берёт PNG-ассеты, оптимизирует их и кладёт в итоговый артефакт.
Пример шага:
find public -name "*.png" -print0 | while IFS= read -r -d '' file; do tmp="${file}.zopfli.png" zopflipng -m --lossy_transparent "$file" "$tmp" mv "$tmp" "$file"done
Для более осторожного варианта можно не заменять файлы сразу:
mkdir -p optimizedfind public -name "*.png" -print0 | while IFS= read -r -d '' file; do name=$(basename "$file") zopflipng -m "$file" "optimized/$name"done
В CI важно использовать -y, если выходные файлы могут существовать:
zopflipng -y -m input.png output.png
Иначе сборка может зависнуть на вопросе overwrite?.
Интеграция с Python и скриптами
Для Python-процессов ZopfliPNG обычно вызывают как внешнюю команду через subprocess. Такой вариант удобен, если PNG-оптимизация является частью собственного генератора сайта, экспортёра ассетов, бота, внутреннего инструмента или backend-процесса.
Пример:
from pathlib import Pathimport subprocesssource = Path("input.png")target = Path("output.png")result = subprocess.run( ["zopflipng", "-m", "--lossy_transparent", str(source), str(target)], capture_output=True, text=True,)if result.returncode != 0: raise RuntimeError(result.stderr)
Для пакетной обработки можно пройтись по каталогу:
from pathlib import Pathimport subprocesssource_dir = Path("assets")target_dir = Path("dist")target_dir.mkdir(exist_ok=True)for source in source_dir.glob("*.png"): target = target_dir / source.name subprocess.run( ["zopflipng", "-y", "-m", "--lossy_transparent", str(source), str(target)], check=True, )
Такой подход удобен тем, что ZopfliPNG остаётся отдельной программой, а Python отвечает только за обход файлов, обработку ошибок и структуру проекта.
Типовые ошибки при работе с ZopfliPNG
Ошибка: ожидать GUI
ZopfliPNG не открывает окно. Если пользователь запускает файл двойным кликом и ничего не происходит, это нормально для CLI-утилиты. Работать с ней нужно через терминал, shell-скрипт, build-скрипт или обёртку.
Ошибка: путать zopfli и zopflipng
zopfli — это общая утилита/алгоритм для Deflate, gzip и zlib. zopflipng — конкретная команда для PNG. Для изображений нужен именно zopflipng.
Правильно:
zopflipng input.png output.png
Не универсально для PNG-пайплайна:
zopfli input.png
Ошибка: применять --always_zopflify в продакшене
Этот параметр может записать файл больше исходного. Он нужен для тестов, а не для обычной оптимизации.
Ошибка: использовать --lossy_8bit без проверки
Если исходный PNG 16-битный, перевод в 8 бит может быть неприемлем. Для обычной иконки — нормально. Для данных — опасно.
Ошибка: удалять важные чанки
Если изображение зависит от профиля или гаммы, нужно использовать --keepchunks.
Например:
zopflipng --keepchunks=iCCP,sRGB,gAMA input.png output.png
Ошибка: считать отсутствие выигрыша поломкой
Иногда ZopfliPNG не уменьшает файл. Это не ошибка. Значит, исходник уже хорошо оптимизирован или конкретное изображение плохо поддаётся дополнительному сжатию.
Ошибка: применять ZopfliPNG к фотографиям вместо выбора правильного формата
PNG для фотографий часто слишком тяжёлый. ZopfliPNG может уменьшить такой файл, но не сделает PNG конкурентом JPEG/AVIF/WebP для обычных фото.
Как выбрать параметры для разных задач
Иконки сайта
Для иконок с прозрачностью:
zopflipng -m --lossy_transparent icon.png icon.min.png
Если важен цветовой профиль:
zopflipng -m --lossy_transparent --keepchunks=iCCP,sRGB icon.png icon.min.png
Логотип
Для логотипа лучше начать безопасно:
zopflipng -m logo.png logo.min.png
Если логотип содержит прозрачность и нет зависимости от скрытых RGB-данных:
zopflipng -m --lossy_transparent logo.png logo.min.png
Скриншот интерфейса
Для скриншота:
zopflipng -m screenshot.png screenshot.min.png
Если скриншоты делаются массово, можно использовать быстрый режим на черновом этапе:
zopflipng -q screenshot.png screenshot.test.png
PNG-спрайты
Для спрайтов с прозрачным фоном:
zopflipng -m --lossy_transparent sprite.png sprite.min.png
Если спрайт используется в движке, который строго сравнивает данные, сначала проверить без lossy-параметров:
zopflipng -m sprite.png sprite.min.png
PNG для печати
Для печати осторожнее:
zopflipng -m --keepchunks=iCCP,sRGB,gAMA,pHYs print.png print.min.png
--lossy_8bit использовать только если точно известно, что 16-битная точность не нужна.
Техническая карта или маска
Для технических данных:
zopflipng -m --keepcolortype data.png data.min.png
Не использовать --lossy_transparent, если прозрачные пиксели могут хранить скрытую информацию. Не использовать --lossy_8bit, если глубина канала важна.
Проверка результата после оптимизации
После ZopfliPNG нужно проверять не только размер, но и пригодность файла.
Минимальный чек-лист:
| Проверка | Что сделать |
|---|---|
| Размер | Сравнить input.png и output.png |
| Отображение | Открыть в целевом браузере или приложении |
| Прозрачность | Проверить на светлом и тёмном фоне |
| Цвет | Проверить критичные логотипы и UI-элементы |
| Метаданные | Убедиться, что нужные чанки сохранены |
| Автоматизация | Проверить, что скрипт не зависает на overwrite-вопросе |
Для веба особенно важно смотреть изображение в реальном месте: на странице, в интерфейсе, в CSS-блоке, на разных фонах. PNG может быть пиксельно корректным, но удаление гаммы или профиля иногда меняет восприятие цвета в конкретной цепочке.
Производительность и скорость
ZopfliPNG медленная не случайно. Она тратит время на более тщательный поиск компактного Deflate-представления и подбор параметров. Это главное отличие от быстрых оптимизаторов.
Практический вывод:
-
для одного важного файла медленность почти не имеет значения;
-
для сотен файлов лучше запускать обработку в CI или параллельно;
-
для тысяч PNG стоит комбинировать инструменты и не гонять
--iterations=500без необходимости; -
для разработки можно использовать
-q, а для релиза —-m.
При массовой обработке важно разделять файлы. Например, большие скриншоты можно обрабатывать обычным режимом, а маленькие иконки — через -m. Экстремальные параметры стоит применять только к тем изображениям, где выигрыш заметен.
Рекомендуемые рабочие профили
Профиль осторожный
zopflipng input.png output.png
Подходит для первого запуска, проверки инструмента и строгого режима без дополнительных lossy-преобразований.
Профиль веб-графика
zopflipng -m --lossy_transparent input.png output.png
Подходит для иконок, интерфейсной графики, прозрачных PNG и ассетов сайта.
Профиль сохраняем цвет
zopflipng -m --keepchunks=iCCP,sRGB,gAMA input.png output.png
Подходит для изображений, где цветовая интерпретация важнее каждого дополнительного байта экономии.
Профиль технический PNG
zopflipng -m --keepcolortype --keepchunks=gAMA,pHYs input.png output.png
Подходит для файлов, где структура PNG имеет значение.
Профиль максимальный прогон
zopflipng --iterations=500 --filters=01234mepb --lossy_transparent input.png output.png
Подходит для отдельных важных изображений, где можно ждать долго.
Плюсы ZopfliPNG
Главное достоинство программы — качество сжатия. ZopfliPNG часто даёт дополнительный выигрыш там, где обычный экспорт из редактора уже кажется нормальным. Особенно это заметно на PNG с прозрачностью, простыми цветами, интерфейсной графикой и неоптимальными исходниками.
Второй плюс — предсказуемость. У программы простая модель: входной PNG, выходной PNG, понятный консольный отчёт. Нет скрытых облачных обработок, лимитов, регистрации, загрузки файлов на сервер или непонятных настроек качества.
Третий плюс — удобство автоматизации. Команды легко вставить в shell-скрипт, Makefile, CI/CD, Python-процесс или сборку сайта.
Четвёртый плюс — аккуратная логика сохранения результата. Если оптимизированный файл оказывается больше, обычный рабочий режим не обязан ухудшать итог.
Пятый плюс — точное управление спорными зонами: можно сохранять чанки, фиксировать цветовой тип, включать или отключать lossy-прозрачность, менять фильтры и число итераций.
Минусы ZopfliPNG
Главный минус — скорость. Программа не создана для мгновенного интерактивного сжатия больших каталогов. Её сильные настройки могут быть слишком долгими для ежедневной ручной работы.
Второй минус — отсутствие GUI. Новичку проще открыть ImageOptim, FileOptimizer или другой визуальный оптимизатор. ZopfliPNG требует понимания командной строки.
Третий минус — ограниченность формата. Программа работает именно с PNG. Она не решает задачу выбора оптимального формата для сайта и не заменяет WebP/AVIF-конвертер.
Четвёртый минус — аккуратность с метаданными. По умолчанию удаление необязательных чанков полезно, но не всегда допустимо.
Пятый минус — убывающая отдача. После хорошей оптимизации другим инструментом ZopfliPNG может дать очень небольшой выигрыш, а времени потратить много.
Кому подходит ZopfliPNG
ZopfliPNG подходит:
-
веб-разработчикам, которые хотят уменьшить статичные PNG;
-
frontend-инженерам, оптимизирующим вес страницы;
-
разработчикам игр с PNG-ассетами;
-
авторам статичных сайтов;
-
инженерам сборки;
-
тем, кто хранит много PNG в репозитории;
-
дизайнерам, готовым использовать CLI через скрипт;
-
техническим специалистам, которым нужен контроль над PNG-структурой.
ZopfliPNG не лучший выбор для пользователя, который хочет просто перетащить картинку в окно и получить результат без команд. Для такого сценария удобнее графические оболочки и комплексные оптимизаторы. Но если важны точность, автоматизация и максимальный результат, ZopfliPNG остаётся одним из самых сильных вариантов.
Итоговая оценка
ZopfliPNG — узкий, медленный, но сильный оптимизатор PNG. Его ценность не в удобном интерфейсе, а в качестве финального сжатия. Программа особенно полезна, когда изображение уже готово, формат PNG менять нельзя, а каждый килобайт имеет значение.
Лучший способ использовать ZopfliPNG — не вручную для каждой случайной картинки, а как часть пайплайна: экспорт из редактора, проверка изображения, затем автоматический прогон через zopflipng, затем публикация или сборка. Для обычного сайта достаточно команд zopflipng input.png output.png и zopflipng -m --lossy_transparent input.png output.png. Для сложных случаев есть --keepchunks, --keepcolortype, --filters и --iterations.
ZopfliPNG не заменяет OptiPNG, pngcrush, PNGOUT, OxiPNG или pngquant во всех сценариях. Она занимает конкретное место: финальный дожим PNG с упором на максимальную плотность Deflate-сжатия. Именно в этой роли программа раскрывается лучше всего.