Pngwolf: программа для оптимизации PNG
Pngwolf PNG Optimizer — специализированная консольная программа для уменьшения размера PNG-файлов без изменения видимого изображения. В отличие от графических компрессоров, где пользователь перетаскивает картинку в окно и нажимает кнопку сжатия, Pngwolf работает через командную строку и сосредоточен на внутренней структуре PNG: фильтрах строк, IDAT-данных и Deflate-сжатии. Это не редактор изображений, не онлайн-сервис и не универсальный конвертер форматов. Это точечный инструмент для тех случаев, когда нужно выжать из PNG еще немного размера после обычной оптимизации.
Pngwolf
Для сжатия и оптимизации файлов: работает в браузере без установки, но зависит от сервиса и интернета.
Главная идея Pngwolf проста по формулировке, но технически необычна: программа ищет более удачную последовательность PNG scanline filters для строк изображения. В PNG каждая строка пикселей может быть предварительно обработана одним из фильтров, чтобы после этого данные лучше сжимались Deflate-алгоритмом. Типичные PNG-энкодеры используют эвристики, то есть быстрые правила выбора фильтра. Pngwolf идет дальше: он применяет генетический алгоритм, сравнивает разные последовательности фильтров, постепенно улучшает их и оставляет вариант, который дает меньший IDAT-поток.
Из-за такой архитектуры Pngwolf стоит рассматривать не как программу для всех, а как технический PNG optimizer для веб-разработчиков, администраторов сайтов, специалистов по оптимизации графики, авторов сборочных скриптов и тех, кто понимает, зачем проверять размер IDAT отдельно от общего размера файла. Программа особенно уместна для RGB и RGBA PNG: интерфейсных иконок, логотипов, небольших элементов дизайна, прозрачных PNG-файлов, графики для сайтов и проектов, где важны десятки или сотни байтов.
У Pngwolf нет окна предпросмотра, боковой панели, списка файлов, кнопок Add Files, Start, Compress, Save или привычного индикатора в стиле настольных приложений. Его интерфейс — это параметры запуска: --in=, --out=, --info, --verbose, --normalize-alpha, --max-time, --max-stagnate-time и другие ключи. Для обычного пользователя это выглядит сурово, но именно такая форма дает контроль над тем, как долго работает оптимизация, какие данные сохраняются, какие чанки PNG остаются в файле и какой Deflate-энкодер используется на выходе.
| Характеристика | Описание |
|---|---|
| Название | Pngwolf PNG Optimizer |
| Тип программы | консольная утилита для оптимизации PNG |
| Основная задача | уменьшение размера PNG через подбор scanline-фильтров и повторное Deflate-сжатие |
| Интерфейс | командная строка |
| Основной формат | PNG |
| Подходящий тип изображений | RGB и RGBA PNG |
| Ключевой метод | генетический алгоритм выбора фильтров строк |
| Выходной результат | PNG-файл меньшего размера или сохранение исходного варианта, если он оказался лучше |
| Важное ограничение | interlaced PNG не поддерживаются |
| Уровень пользователя | продвинутый пользователь, разработчик, специалист по оптимизации сайта |
Pngwolf удобнее всего воспринимать как финальный инструмент в цепочке оптимизации PNG. Сначала изображение можно обработать более универсальными программами, которые умеют удалять метаданные, менять цветовой тип, пробовать разные стандартные стратегии. Затем Pngwolf можно использовать как последний проход, чтобы проверить, удастся ли уменьшить IDAT еще сильнее за счет более выгодной фильтрации строк.
Содержание
- 1 Как Pngwolf уменьшает размер PNG
- 2 Интерфейс программы: командная строка и параметры запуска
- 3 Установка и сборка
- 4 Первый запуск и базовая оптимизация PNG
- 5 Анализ PNG без сохранения результата
- 6 Подробный вывод и YAML-совместимые логи
- 7 Ограничение времени оптимизации
- 8 Управление генетическим поиском
- 9 Выбор Deflate-оценщика и итогового сжатия
- 10 Работа с прозрачностью и --normalize-alpha
- 11 Управление PNG-чанками
- 12 Сохранение IDAT-данных для анализа
- 13 Пакетная обработка PNG
- 14 Что Pngwolf не делает
- 15 Качество результата и lossless-логика
- 16 Производительность и скорость работы
- 17 Практические сценарии использования
- 18 Примеры команд для разных задач
- 19 Типичные ошибки при работе с Pngwolf
- 20 Плюсы Pngwolf
- 21 Минусы Pngwolf
- 22 Для кого подходит Pngwolf
- 23 Сравнение с аналогами
- 24 Рекомендованная цепочка оптимизации
- 25 Безопасность работы и сохранение оригиналов
- 26 Итоговая оценка
Как Pngwolf уменьшает размер PNG
PNG-файл содержит не просто картинку, а набор структурированных данных. Видимое изображение хранится внутри IDAT-чанков в сжатом виде. Перед Deflate-сжатием строки изображения проходят через один из фильтров. В PNG используются пять базовых вариантов:
| Номер фильтра | Название | Смысл |
| 0 | None |
строка записывается без фильтрации |
| 1 | Sub |
байты связываются с соседними байтами слева |
| 2 | Up |
строка связывается со строкой выше |
| 3 | Avg |
используется усреднение соседних значений |
| 4 | Paeth |
применяется предсказатель Paeth |
Внешне пользователь видит тот же самый PNG. Разница находится внутри файла: меняется представление строк перед сжатием. Один и тот же набор пикселей может давать разные размеры IDAT в зависимости от того, какой фильтр выбран для каждой строки. На простом градиенте один фильтр может сделать данные более повторяемыми, на скриншоте интерфейса — другой, на иконке с прозрачностью — третий. Именно поэтому Pngwolf не ограничивается одним правилом для всего изображения.
Генетический алгоритм в Pngwolf работает с последовательностями фильтров как с геномами. В такой последовательности каждая позиция соответствует строке PNG, а значение позиции — одному из пяти фильтров. Программа создает начальную популяцию вариантов, оценивает, насколько хорошо они сжимаются, затем комбинирует удачные части разных последовательностей и постепенно ищет лучший результат. Если одна комбинация хорошо сжимает верхнюю часть изображения, а другая — нижнюю, Pngwolf может получить новый вариант, который объединит сильные стороны обеих.
В практическом смысле это означает, что Pngwolf не портит качество и не снижает разрешение. Он не делает изображение размытым, не уменьшает количество пикселей и не переводит PNG в JPEG. В обычном режиме программа пытается сохранить видимое изображение тем же самым, но перепаковать его внутренние данные более эффективно. Исключение — параметр --normalize-alpha, о котором важно говорить отдельно: он меняет RGB-значения полностью прозрачных пикселей, обычно незаметные при просмотре изображения, но формально это уже не строгое lossless-преобразование.
Pngwolf не пытается быть широким PNG-редактором. Он не делает палитризацию, не превращает PNG-24 в PNG-8, не анализирует визуальное качество, не подбирает количество цветов и не конвертирует файл в WebP или AVIF. Его область — фильтры строк и Deflate-представление. Именно в этой узкой зоне программа полезна: она может находить варианты, которые пропускают более простые оптимизаторы.
Интерфейс программы: командная строка и параметры запуска
Pngwolf запускается из терминала, командной строки Windows, PowerShell, bash, zsh или другого shell-окружения. В базовом виде команда состоит из имени программы и двух ключевых параметров: входного PNG и выходного PNG.
pngwolf --in=input.png --out=output.png
Параметр --in=input.png указывает исходный файл. Параметр --out=output.png указывает, куда сохранить результат. Для Pngwolf это принципиально: если не указать --out=, программа может выполнить анализ и оптимизацию, но по умолчанию не обязана сохранять новый PNG. Поэтому при обычном использовании --out лучше считать обязательным параметром.
Справка вызывается командой:
pngwolf --help
В справке Pngwolf перечислены основные группы параметров: входной и выходной файл, IDAT-экспорт, выбор Deflate-библиотеки, настройки оценки, параметры PNG, подробность вывода и служебные команды. Для консольной программы это фактически главное окно интерфейса: через него пользователь видит, какие действия доступны.
| Параметр | Назначение |
--in= |
путь к исходному PNG |
--out= |
путь к выходному PNG |
--original-idat-to= |
сохранить исходные IDAT-данные в gzip-контейнер |
--best-idat-to= |
сохранить лучший найденный IDAT-поток в gzip-контейнер |
--out-deflate= |
выбрать библиотеку Deflate для итогового файла |
--estimator= |
выбрать библиотеку для оценки вариантов |
--normalize-alpha |
сделать полностью прозрачные RGBA-пиксели прозрачным черным |
--strip-chunk= |
удалить чанк с заданным четырехсимвольным именем |
--keep-chunk= |
сохранить чанк с заданным четырехсимвольным именем |
--strip-optional |
удалить опциональные чанки, кроме tRNS |
--verbose |
включить подробный вывод |
--info |
вывести анализ файла и завершить работу |
--version |
показать версию |
--help |
показать справку |
Pngwolf не подменяет собой программы, где пользователь видит миниатюры файлов и кнопку пакетного экспорта. Но в техническом workflow такой интерфейс удобен: команду можно вставить в shell-скрипт, Makefile, задачу CI/CD, локальный скрипт подготовки ассетов или ручной набор команд для финального прохода по PNG-иконкам.
Установка и сборка
Pngwolf распространяется как open source-проект. Его исходный код написан на C++, а сборка рассчитана на пользователей, которые умеют работать с компилятором, зависимостями и make/cmake-подходом. Для массового пользователя это более высокий порог входа, чем у OptiPNG или Oxipng, которые обычно проще установить через пакетный менеджер или взять готовым бинарным файлом.
Для оригинальной ветки и модификации pngwolf-zopfli важны внешние библиотеки. Вариант pngwolf-zopfli использует Zopfli для финального сжатия, а также подключает GAlib, libdeflate и zlib. Зависимости размещаются в соответствующих подкаталогах рядом с pngwolf.cxx: galib, libdeflate, zlib, zopfli. При клонировании репозитория с подмодулями можно получить их через:
git submodule update --init --recursive
После этого сборка выполняется через CMake, make-файлы или прямой вызов компилятора с файлами, указанными в конфигурации проекта. Для пользователя Windows также важно наличие Makefile.vc, потому что он указывает на возможность сборки в среде Microsoft Visual C++. На Linux и macOS удобнее использовать стандартный компилятор C++ и CMake.
Сложность установки — один из главных практических минусов Pngwolf. Эта программа не похожа на современные утилиты, где есть страница релизов с готовыми сборками под Windows, macOS и Linux. Зато после сборки получается компактный CLI-инструмент, который можно вызывать из любого скрипта и использовать без графической оболочки.
Первый запуск и базовая оптимизация PNG
Минимальная рабочая команда выглядит так:
pngwolf --in=logo.png --out=logo-optimized.png
В этом примере logo.png — исходное изображение, а logo-optimized.png — результат. Pngwolf читает структуру PNG, извлекает IDAT-данные, анализирует фильтры, запускает поиск лучшей последовательности scanline filters, пересжимает данные и сохраняет новый PNG.
Для аккуратной работы лучше не перезаписывать исходник. Практичный вариант — сохранять результат рядом с оригиналом или в отдельную папку:
pngwolf --in=assets/logo.png --out=assets-optimized/logo.png
Так проще сравнить размеры:
ls -lh assets/logo.png assets-optimized/logo.png
Или через stat:
stat -c "%n %s bytes" assets/logo.png assets-optimized/logo.png
На macOS команда stat использует другой синтаксис:
stat -f "%N %z bytes" assets/logo.png assets-optimized/logo.png
В обычном сценарии Pngwolf полезен не на всех PNG подряд, а на тех, где внутреннее представление действительно можно улучшить. Например, интерфейсные PNG, экспортированные из графических редакторов, часто содержат не самый удачный набор фильтров. Скриншоты, простые логотипы, прозрачные элементы и графика с повторяющимися областями тоже могут давать выигрыш.
Если после оптимизации файл не стал меньше, это не означает ошибку. PNG мог уже быть хорошо обработан другим инструментом, мог иметь мало строк для эффективного подбора или мог требовать другого типа оптимизации, например палитризации. Pngwolf работает именно с фильтрами и Deflate-сжатием, поэтому не нужно ждать от него результата, который дает pngquant при переводе изображения в палитровый PNG-8.
Анализ PNG без сохранения результата
Для диагностики файла используется режим --info:
pngwolf --in=icon.png --info
Этот режим выводит подробный анализ и завершает работу без полноценной оптимизации и сохранения результата. Он полезен перед тем, как запускать длительный поиск, особенно если нужно понять, что находится внутри PNG.
В выводе Pngwolf можно увидеть размеры изображения, глубину цвета, color mode, состояние interlace, ширину scanline, размер распакованных и сжатых IDAT-данных, список присутствующих chunks и сведения о полностью прозрачных пикселях в RGBA-файлах. Для PNG с прозрачностью программа дополнительно показывает invisible colors — цвета пикселей, у которых альфа-канал равен нулю.
Пример команды для анализа прозрачной иконки:
pngwolf --in=icons/search.png --info
Такой режим особенно полезен, когда PNG выглядит маленьким и простым, но занимает подозрительно много места. Причина может быть не в разрешении, а в неудачной фильтрации строк, лишних чанках или RGB-значениях полностью прозрачных пикселей. Pngwolf помогает увидеть, что именно происходит внутри файла, вместо слепого сравнения только общего размера.
В техническом процессе анализ удобно использовать перед пакетной обработкой:
pngwolf --in=sample.png --info
pngwolf --in=sample.png --out=sample.optimized.png --max-stagnate-time=10
Сначала можно оценить файл, затем запустить оптимизацию с ограничением времени. Такой подход экономит время на больших наборах изображений.
Подробный вывод и YAML-совместимые логи
Pngwolf умеет выводить подробную информацию о работе. Для этого используется общий флаг:
pngwolf --in=button.png --out=button.optimized.png --verbose
--verbose включает сразу три вида подробного вывода:
-
--verbose-analysis; -
--verbose-genomes; -
--verbose-summary.
Каждый параметр можно включать отдельно. Если нужен только расширенный анализ входного PNG, достаточно:
pngwolf --in=button.png --out=button.optimized.png --verbose-analysis
Если важно видеть, как меняются лучшие найденные последовательности фильтров, используется:
pngwolf --in=button.png --out=button.optimized.png --verbose-genomes
Если нужен расширенный итог после оптимизации, используется:
pngwolf --in=button.png --out=button.optimized.png --verbose-summary
Подробный вывод Pngwolf рассчитан не на визуальное удобство, а на техническую читаемость. В нем могут быть строки вроде deflated idat size, number of genomes evaluated, best filter sequence found, size difference to original, original filters, basic heuristic filters, deflate scanline filters. Для обычного пользователя это выглядит перегруженно, но для разработчика такие данные ценны: они показывают не только итоговый размер, но и поведение алгоритма.
Пример команды для получения расширенного отчета:
pngwolf --in=ui-panel.png --out=ui-panel.optimized.png --verbose-analysis --verbose-summary
В таком режиме удобно сравнивать несколько вариантов одного и того же файла. Например, можно сначала обработать изображение через другой оптимизатор, затем прогнать Pngwolf и посмотреть, какие IDAT-размеры получаются для разных фильтров.
Ограничение времени оптимизации
Pngwolf может работать долго. Это естественное следствие его подхода: программа многократно проверяет разные последовательности фильтров и оценивает, как они сжимаются. Для небольших иконок это может быть приемлемо, но для больших PNG или набора из сотен файлов без ограничений процесс легко становится слишком медленным.
Для контроля времени используется --max-time:
pngwolf --in=screenshot.png --out=screenshot.optimized.png --max-time=60
Эта команда ограничивает общее время работы 60 секундами. Если задача — быстро проверить, есть ли смысл применять Pngwolf к файлу, такой лимит удобнее, чем бесконечно ждать идеального результата.
Второй важный параметр — --max-stagnate-time:
pngwolf --in=screenshot.png --out=screenshot.optimized.png --max-stagnate-time=10
Он останавливает поиск, если в течение заданного числа секунд не находится улучшение. Это один из самых практичных ключей Pngwolf. Для одиночной иконки можно дать программе больше времени, но для папки с десятками файлов лучше использовать ограничение, иначе обработка может растянуться.
Хорошая базовая команда для реальной работы:
pngwolf --in=icon.png --out=icon.optimized.png --max-stagnate-time=10
Если изображение крупнее:
pngwolf --in=large-ui.png --out=large-ui.optimized.png --max-time=120 --max-stagnate-time=20
В пакетной оптимизации оба параметра лучше задавать всегда. Pngwolf — инструмент для добора размера, а не быстрый массовый конвейер. Лимиты позволяют использовать его предсказуемо.
Управление генетическим поиском
Pngwolf позволяет настраивать сам процесс поиска. Это отличает программу от простых PNG-компрессоров, где пользователь выбирает только условный уровень сжатия. Здесь можно управлять размером популяции, лимитами оценок, исключением начальных вариантов и экспериментальными эвристиками.
Основные параметры:
| Параметр | Что делает |
--population-size= |
задает размер популяции генетического алгоритма |
--max-evaluations= |
ограничивает число проверенных геномов |
--max-deflate= |
останавливает работу после заданного объема Deflate-обработки |
--exclude-singles |
исключает варианты, где все строки используют один и тот же фильтр |
--exclude-original |
исключает фильтры исходного изображения из начальной популяции |
--exclude-heuristic |
исключает эвристически созданные фильтры |
--exclude-experiments |
отключает экспериментальные эвристики |
По умолчанию Pngwolf использует population size 19. Для большинства практических задач менять этот параметр не нужно. Увеличение популяции может дать алгоритму больше вариантов для поиска, но также увеличивает вычислительную нагрузку. Если цель — быстро получить разумный результат, лучше сначала ограничивать время, а не усложнять популяцию.
Пример более контролируемого запуска:
pngwolf --in=panel.png --out=panel.optimized.png --population-size=25 --max-evaluations=5000
Такой вариант подходит для экспериментов, когда нужно не просто сжать файл, а сравнить поведение алгоритма при разных настройках. Для обычной подготовки изображений к сайту чаще достаточно:
pngwolf --in=panel.png --out=panel.optimized.png --max-stagnate-time=10
Параметры --exclude-original, --exclude-singles и --exclude-heuristic нужны в основном для тестирования. В нормальной оптимизации лучше не исключать полезные стартовые варианты без причины. Исходные фильтры, одиночные фильтры и эвристические последовательности могут дать хорошую отправную точку.
Выбор Deflate-оценщика и итогового сжатия
В pngwolf-zopfli есть две связанные стадии: оценка вариантов и финальное сжатие. Для оценки используется --estimator=, а для выходного файла — --out-deflate=.
Пример:
pngwolf --in=icon.png --out=icon.optimized.png --estimator=libdeflate --out-deflate=zopfli
Смысл такой: быстрый оценщик проверяет множество фильтров, а более тяжелый энкодер применяется к лучшему найденному варианту. Это разумный компромисс между скоростью и итоговым размером. Если использовать медленный энкодер на каждой оценке, оптимизация может стать слишком долгой.
Поддерживаемые имена Deflate-библиотек в pngwolf-zopfli:
| Имя | Роль |
libdeflate |
быстрый вариант для оценки и сжатия |
zlib |
классическая библиотека Deflate |
zopfli |
более медленное, но сильное финальное сжатие |
Для библиотек можно задавать дополнительные параметры через запятую. Например:
pngwolf --in=icon.png --out=icon.optimized.png --out-deflate=zopfli,iter=30,maxsplit=15
Для zlib доступны параметры:
| Параметр | Диапазон | Назначение |
level= |
0–9 | уровень сжатия |
strategy= |
0–3 | стратегия Deflate |
window= |
8–15 | размер окна |
memlevel= |
1–9 | уровень использования памяти |
Для libdeflate доступен параметр:
| Параметр | Диапазон | Назначение |
level= |
1–12 | уровень сжатия |
Для zopfli доступны параметры:
| Параметр | Назначение |
iter= |
число итераций |
maxsplit= |
максимальное число блоков для разбиения |
verbose= |
подробность вывода Zopfli |
Увеличение параметров может дать меньший файл, но не гарантирует пропорционального выигрыша. В PNG-оптимизации часто действует правило убывающей отдачи: первые секунды дают заметный результат, а дальнейшие минуты могут экономить считанные байты. Поэтому Pngwolf лучше использовать осознанно: для важных ассетов можно дать больше времени, для массовых изображений — жестко ограничивать работу.
Работа с прозрачностью и --normalize-alpha
Одна из самых интересных функций Pngwolf — --normalize-alpha. Она предназначена для RGBA PNG, где есть полностью прозрачные пиксели. В таких пикселях альфа-канал равен нулю, поэтому их RGB-значения обычно не видны при нормальном просмотре изображения. Но эти значения все равно хранятся в файле и участвуют в сжатии. Если прозрачные пиксели имеют разные невидимые цвета, Deflate может сжимать данные хуже.
Команда выглядит так:
pngwolf --in=icon.png --out=icon.optimized.png --normalize-alpha
Pngwolf превращает полностью прозрачные пиксели в прозрачный черный вариант. Визуально иконка обычно остается той же, потому что прозрачные пиксели не отображаются. Но внутренние байты становятся более однообразными, и PNG может уменьшиться.
Это полезно для:
-
веб-иконок с прозрачным фоном;
-
UI-элементов, экспортированных из графических редакторов;
-
логотипов с мягкими прозрачными краями;
-
PNG-спрайтов;
-
маленьких изображений, где лишние невидимые RGB-данные занимают заметную долю файла.
При этом --normalize-alpha нельзя механически применять ко всем рабочим файлам. Формально параметр меняет данные изображения, пусть и невидимые при обычном рендеринге. В некоторых специфических графических процессах RGB-значения полностью прозрачных пикселей могут использоваться: например, при нестандартной обработке альфа-канала, генерации масок, специальных эффектах или последующем редактировании. Для обычной веб-графики это редко критично, но для исходников лучше сохранять оригинал.
Практичная команда для иконок:
pngwolf --in=icons/menu.png --out=icons-optimized/menu.png --normalize-alpha --max-stagnate-time=10
Для проверки перед применением можно сначала вывести анализ:
pngwolf --in=icons/menu.png --info
Если в выводе есть список invisible colors и сообщение о том, что --normalize-alpha превратит их в transparent black, значит этот параметр имеет смысл протестировать.
Управление PNG-чанками
Pngwolf не является полноценным инструментом очистки метаданных в стиле специализированных оптимизаторов, но в pngwolf-zopfli есть параметры для работы с чанками:
--strip-chunk=
--keep-chunk=
--strip-optional
Параметр --strip-chunk= удаляет чанк по четырехсимвольному имени. Например, для удаления текстового чанка tEXt можно использовать:
pngwolf --in=image.png --out=image.optimized.png --strip-chunk=tEXt
Параметр --keep-chunk= сохраняет чанк с указанным именем при использовании более агрессивной очистки:
pngwolf --in=image.png --out=image.optimized.png --strip-optional --keep-chunk=iCCP
Параметр --strip-optional удаляет опциональные чанки, кроме tRNS. Это уже не только работа с IDAT, поэтому применять такую команду нужно аккуратно. Например, удаление цветового профиля iCCP может повлиять на цветовое поведение изображения в некоторых условиях. Для веб-иконок это часто несущественно, а для изображений, где важна точная цветопередача, лучше не удалять такие данные без проверки.
Команда для технической очистки и оптимизации:
pngwolf --in=asset.png --out=asset.optimized.png --strip-optional --max-stagnate-time=10
Более аккуратная команда с сохранением профиля:
pngwolf --in=asset.png --out=asset.optimized.png --strip-optional --keep-chunk=iCCP --max-stagnate-time=10
Pngwolf также умеет пересжимать некоторые дополнительные данные, например iCCP, если это дает уменьшение размера. Но основная ценность программы все равно остается в подборе фильтров и Deflate-представлении IDAT.
Сохранение IDAT-данных для анализа
Для исследовательской работы Pngwolf предоставляет параметры:
--original-idat-to=
--best-idat-to=
Первый сохраняет исходные IDAT-данные в gzip-контейнер:
pngwolf --in=input.png --original-idat-to=original-idat.gz --info
Второй сохраняет лучший найденный IDAT-поток:
pngwolf --in=input.png --out=output.png --best-idat-to=best-idat.gz
Обычному пользователю эти файлы не нужны. Они полезны тем, кто изучает PNG-сжатие, сравнивает Deflate-представления, строит собственные тесты или анализирует, почему один фильтр дает меньший поток, а другой — больший. В веб-разработке такие параметры применяются редко, но для технической статьи, бенчмарка или исследования они удобны.
Пример полного запуска с сохранением IDAT:
pngwolf --in=sample.png --out=sample.optimized.png --original-idat-to=sample.original.gz --best-idat-to=sample.best.gz --verbose-summary
После этого можно сравнивать не только итоговые PNG, но и сами IDAT-потоки. Такой подход точнее показывает, что именно изменилось в основной сжатой части файла.
Пакетная обработка PNG
У Pngwolf нет собственного графического batch-интерфейса. Нет окна, куда можно добавить папку, выбрать пресет и нажать Start. Пакетная обработка делается средствами shell.
Для Linux и macOS:
mkdir -p optimized
for file in images/*.png; do
pngwolf --in="$file" --out="optimized/$(basename "$file")" --max-stagnate-time=10
done
Эта команда проходит по всем PNG в папке images, сохраняет результаты в optimized и ограничивает время поиска улучшений десятью секундами без прогресса.
Для более осторожного режима с общим лимитом времени:
mkdir -p optimized
for file in images/*.png; do
pngwolf --in="$file" --out="optimized/$(basename "$file")" --max-time=60 --max-stagnate-time=10
done
Для PowerShell в Windows:
New-Item -ItemType Directory -Force optimized | Out-Null
Get-ChildItem images -Filter *.png | ForEach-Object {
.\pngwolf.exe --in="$($_.FullName)" --out="optimized\$($_.Name)" --max-stagnate-time=10
}
В пакетной обработке важно не сохранять результат поверх исходника. Если что-то пойдет не так, например попадется interlaced PNG или файл с неожиданной структурой, проще удалить выходную папку и повторить процесс. Для сайта также удобно после обработки проверить, какие файлы реально уменьшились:
for file in images/*.png; do
base=$(basename "$file")
old=$(stat -c%s "$file")
new=$(stat -c%s "optimized/$base")
echo "$base: $old -> $new"
done
В реальном workflow Pngwolf чаще используют не для тысяч изображений, а для отобранного набора: иконок, логотипов, графики интерфейса, PNG-кнопок, прозрачных элементов. Для большой медиатеки лучше сначала применять быстрый инструмент, а Pngwolf оставлять для финального добора.
Что Pngwolf не делает
Pngwolf важно оценивать по его реальной специализации. Он не заменяет все PNG-оптимизаторы сразу и не решает задачи, для которых нужны другие инструменты.
Pngwolf не выполняет палитризацию как основную задачу. Если у изображения мало цветов, другой инструмент может перевести его в индексированный PNG и получить намного больший выигрыш. Pngwolf в обычной логике не занимается таким преобразованием: он работает с фильтрами и Deflate-сжатием.
Pngwolf не является редактором изображений. В нем нельзя кадрировать картинку, менять размер, рисовать, удалять фон, добавлять текст, просматривать слои или сравнивать две версии визуально. Это CLI-утилита, и весь контроль идет через параметры запуска.
Pngwolf не поддерживает interlaced PNG. Если файл использует чересстрочную схему, программа завершит работу с ошибкой. Перед массовой обработкой это нужно учитывать: набор PNG лучше проверить или предварительно привести к обычному non-interlaced виду другим инструментом.
Pngwolf не предназначен для JPEG, GIF, WebP, AVIF, TIFF или SVG. Его предмет — PNG. Попытка использовать его как универсальный компрессор изображений приведет только к лишним ошибкам.
Pngwolf не всегда быстрее аналогов. Наоборот, глубокий подбор фильтров может занимать минуты. Поэтому его сила не в скорости, а в возможности найти дополнительный выигрыш там, где стандартный быстрый проход уже сработал.
Качество результата и lossless-логика
В обычном режиме Pngwolf сохраняет видимое изображение. Он меняет не пиксели как картинку, а способ подготовки строк к Deflate-сжатию. Поэтому оптимизированный PNG должен выглядеть так же, как исходный. Это особенно важно для интерфейсной графики, где недопустимы артефакты, размытость или изменение цветов.
Но есть нюанс с прозрачностью. --normalize-alpha меняет RGB-значения полностью прозрачных пикселей. В нормальном просмотре они не видны, потому что альфа-канал равен нулю. Однако в данных изображения изменение есть. Поэтому для технической точности режимы стоит различать.
| Режим | Видимое изображение | Что меняется |
| обычная оптимизация | не меняется | последовательность фильтров и Deflate-представление IDAT |
--normalize-alpha |
обычно не меняется | RGB-значения полностью прозрачных пикселей |
--strip-optional |
обычно не меняется, но зависит от чанков | опциональные PNG-чанки |
--strip-chunk=tEXt |
не меняется | текстовые метаданные |
--even-if-bigger |
не меняется | разрешается сохранить результат даже при большем размере |
Для сайта обычно важна видимая идентичность: изображение должно выглядеть так же в браузере. Для архивного хранения, исходников дизайна или нестандартных графических пайплайнов лучше сохранять оригиналы и применять Pngwolf только к экспортным версиям.
Производительность и скорость работы
Pngwolf может быть медленным, потому что его метод требует многократной проверки вариантов. Программа фактически снова и снова готовит IDAT-данные с разными фильтрами и оценивает, какой вариант сжимается лучше. Чем больше изображение и чем выше число строк, тем больше пространство поиска. Для маленькой иконки это нормально, для большого скриншота — уже заметно, для массовой папки без лимитов — проблемно.
Чтобы работать с Pngwolf практично, лучше придерживаться нескольких правил.
Во-первых, задавать --max-stagnate-time. Это самый удобный ограничитель, потому что программа прекращает поиск, когда улучшения перестают появляться:
pngwolf --in=asset.png --out=asset.optimized.png --max-stagnate-time=10
Во-вторых, для крупных файлов добавлять --max-time:
pngwolf --in=large.png --out=large.optimized.png --max-time=120 --max-stagnate-time=15
В-третьих, не применять Pngwolf ко всем изображениям без отбора. Фотографии в PNG обычно сами по себе неудачны для веба, и вместо оптимизации PNG часто разумнее использовать JPEG, WebP или AVIF. Pngwolf хорош для PNG, которые должны остаться PNG: прозрачные элементы, скриншоты интерфейса, пиксельная графика, логотипы, иконки.
В-четвертых, Pngwolf лучше использовать после быстрых инструментов. Если другой оптимизатор уже удалил лишние чанки, исправил базовую структуру и пересжал файл, Pngwolf может сосредоточиться на своей сильной стороне — scanline filters.
Практические сценарии использования
Оптимизация PNG-иконок для сайта
Иконки — один из лучших сценариев для Pngwolf. Они часто имеют прозрачность, небольшие размеры, четкие границы и повторяющиеся области. Даже небольшой выигрыш на одной иконке становится заметнее, если на сайте используется десятки таких файлов.
Пример:
pngwolf --in=icons/search.png --out=icons-optimized/search.png --normalize-alpha --max-stagnate-time=10
Для SVG-иконок Pngwolf не нужен, но для PNG-иконок с прозрачным фоном он может быть полезен. Особенно если файлы экспортированы из графического редактора и содержат невидимые RGB-значения в прозрачной области.
Финальный проход после других оптимизаторов
Pngwolf хорошо работает как последний или предпоследний этап. Например:
oxipng -o 4 --strip safe icon.png
pngwolf --in=icon.png --out=icon.final.png --max-stagnate-time=10
Или:
optipng -o7 icon.png
pngwolf --in=icon.png --out=icon.final.png --max-stagnate-time=10
Такой подход логичен: более универсальный инструмент сначала делает стандартные преобразования, а Pngwolf затем проверяет, можно ли улучшить фильтры строк.
Проверка прозрачности
Если PNG с прозрачностью неожиданно большой, сначала удобно запустить:
pngwolf --in=logo.png --info
Если файл содержит разные invisible colors, можно протестировать:
pngwolf --in=logo.png --out=logo.optimized.png --normalize-alpha
После этого нужно сравнить визуально и проверить размер. Для экспортной веб-графики такой режим часто оправдан.
Оптимизация ассетов перед релизом
В проекте можно держать исходники отдельно, а оптимизированные файлы генерировать перед релизом:
mkdir -p public/img
for file in src/img/*.png; do
pngwolf --in="$file" --out="public/img/$(basename "$file")" --max-stagnate-time=10
done
Это удобно, потому что исходные изображения остаются неизменными, а сайт получает более легкие PNG.
Исследование PNG-сжатия
Pngwolf интересен не только как практическая утилита, но и как инструмент для изучения PNG. Его подробные логи показывают, как разные фильтры влияют на размер. Можно сравнить none, sub, up, avg, paeth, исходную последовательность и эвристические варианты.
Для такого сценария используется:
pngwolf --in=sample.png --out=sample.optimized.png --verbose-analysis --verbose-genomes --verbose-summary
Такой вывод помогает понять, почему один PNG сжимается хорошо, а другой — плохо, хотя визуально они похожи.
Примеры команд для разных задач
| Задача | Команда |
| Базовая оптимизация | pngwolf --in=input.png --out=output.png |
| Анализ файла | pngwolf --in=input.png --info |
| Подробный вывод | pngwolf --in=input.png --out=output.png --verbose |
| Ограничение общего времени | pngwolf --in=input.png --out=output.png --max-time=60 |
| Остановка при отсутствии улучшений | pngwolf --in=input.png --out=output.png --max-stagnate-time=10 |
| Нормализация прозрачных пикселей | pngwolf --in=icon.png --out=icon.optimized.png --normalize-alpha |
| Удаление текстового чанка | pngwolf --in=input.png --out=output.png --strip-chunk=tEXt |
| Удаление опциональных чанков | pngwolf --in=input.png --out=output.png --strip-optional |
| Сохранение исходного IDAT | pngwolf --in=input.png --original-idat-to=original.gz --info |
| Сохранение лучшего IDAT | pngwolf --in=input.png --out=output.png --best-idat-to=best.gz |
| Выбор Zopfli для выхода | pngwolf --in=input.png --out=output.png --out-deflate=zopfli |
| Выбор libdeflate для оценки | pngwolf --in=input.png --out=output.png --estimator=libdeflate |
Эти команды лучше использовать не как набор пресетов, а как примеры. Для обычной практики достаточно --in, --out и одного временного ограничения. Остальные параметры нужны тогда, когда появляется конкретная задача: изучить IDAT, очистить чанк, проверить прозрачность или сравнить Deflate-энкодеры.
Типичные ошибки при работе с Pngwolf
Одна из частых ошибок — запуск без --out. Пользователь ожидает новый файл, но Pngwolf по умолчанию не сохраняет результат, если выходной путь не задан. Правильный вариант:
pngwolf --in=input.png --out=output.png
Вторая ошибка — ожидание мгновенной обработки. Pngwolf может работать долго, особенно на больших изображениях. Поэтому для практической работы лучше сразу добавлять:
--max-stagnate-time=10
Третья ошибка — попытка обработать interlaced PNG. Такой файл Pngwolf не поддерживает. Если в наборе встречаются interlaced PNG, их нужно предварительно преобразовать другим инструментом.
Четвертая ошибка — использовать --normalize-alpha без понимания последствий. Для веб-иконок это часто полезно, но для исходников дизайна лучше хранить оригинал.
Пятая ошибка — сравнивать Pngwolf с pngquant по проценту уменьшения. pngquant может радикально уменьшать PNG за счет палитризации и потерь, а Pngwolf работает иначе. Это разные классы задач. Pngwolf уместен, когда PNG должен остаться визуально тем же и когда важна именно внутренняя Deflate-оптимизация.
Шестая ошибка — запускать Pngwolf на папке из сотен файлов без лимитов. Для такой обработки обязательно нужны --max-time или --max-stagnate-time.
Седьмая ошибка — применять --strip-optional к изображениям, где важны цветовые профили или специальные метаданные. Для веб-ассетов это может быть допустимо, но для рабочих файлов лучше использовать аккуратные параметры --keep-chunk.
Плюсы Pngwolf
Pngwolf силен именно там, где обычные PNG-оптимизаторы действуют по стандартным схемам. Его главные преимущества связаны с глубоким подбором фильтров и контролем через командную строку.
-
Программа применяет генетический алгоритм для поиска удачных PNG scanline filters.
-
Pngwolf может давать дополнительное уменьшение после OptiPNG, pngcrush, AdvanceCOMP, PNGOUT или Oxipng.
-
Утилита работает с RGB и RGBA PNG, включая изображения с прозрачностью.
-
Параметр
--normalize-alphaпомогает уменьшать RGBA-файлы с полностью прозрачными пикселями, в которых есть лишние RGB-значения. -
Подробный вывод подходит для анализа и автоматизации.
-
Есть ограничители времени и числа оценок.
-
Можно сохранить исходный и лучший IDAT-поток для исследования.
-
Программа хорошо вписывается в shell-скрипты.
-
При прерывании работы найденный результат не должен теряться.
-
Инструмент полезен для финальной оптимизации веб-графики.
Главная ценность Pngwolf — не удобство, а глубина. Он не стремится быть самым простым PNG-компрессором. Он дает технический способ проверить, можно ли сжать IDAT лучше за счет другой последовательности фильтров.
Минусы Pngwolf
Недостатки Pngwolf также очевидны. Эта программа не рассчитана на пользователя, который хочет открыть окно, перетащить изображения и сразу получить результат.
-
Нет графического интерфейса.
-
Нет предпросмотра изображения.
-
Нет встроенного визуального сравнения до и после.
-
Нет удобной пакетной панели.
-
Сборка сложнее, чем установка большинства современных PNG-утилит.
-
Interlaced PNG не поддерживаются.
-
Программа может работать медленно.
-
Pngwolf не выполняет палитризацию как основной метод.
-
Не поддерживаются JPEG, WebP, AVIF, GIF и другие форматы.
-
Некоторые параметры требуют понимания структуры PNG.
-
Подробные логи полезны технически, но сложны для новичка.
Эти минусы не делают Pngwolf плохой программой. Они показывают ее назначение: это инструмент для точечной оптимизации и анализа, а не массовое приложение для неподготовленного пользователя.
Для кого подходит Pngwolf
Pngwolf подходит веб-разработчикам, которые собирают фронтенд-ассеты и хотят уменьшить PNG без визуальных потерь. Особенно полезна программа в проектах с большим количеством иконок, кнопок, UI-элементов и прозрачных PNG.
Она подходит техническим SEO-специалистам и администраторам сайтов, если нужно уменьшить вес графики без перехода на другой формат. В таких задачах Pngwolf можно встроить в цепочку оптимизации после более быстрых инструментов.
Pngwolf интересен исследователям форматов изображений. Подробные логи, IDAT-экспорт, разные фильтры и Deflate-настройки позволяют изучать, как внутренняя структура PNG влияет на размер файла.
Программа подходит тем, кто готов работать в терминале. Если пользователь уверенно использует bash, PowerShell, Makefile, CI/CD и пакетные команды, Pngwolf не вызовет принципиальных трудностей.
Pngwolf не подходит тем, кто хочет универсальную программу для сжатия всех картинок. Для фотографий лучше выбирать другие форматы. Для простого массового PNG-сжатия удобнее Oxipng или OptiPNG. Для сильного уменьшения за счет палитры — pngquant. Для визуального интерфейса — ImageOptim, FileOptimizer или другие GUI-оболочки.
Сравнение с аналогами
Pngwolf логично сравнивать не с редакторами изображений, а с реальными PNG-оптимизаторами. Он относится к тем инструментам, которые работают с PNG на уровне структуры файла, фильтров, IDAT и Deflate-сжатия.
| Программа | Интерфейс | Сильная сторона | Слабая сторона | Когда выбрать |
| Pngwolf | CLI | глубокий подбор scanline-фильтров | медленный, сложный для новичка | финальный проход и исследование PNG |
| OptiPNG | CLI | простая lossless-оптимизация | меньше контроля над генетическим подбором фильтров | стандартная быстрая оптимизация |
| pngcrush | CLI | множество стратегий и работа с PNG-чанками | сложная система параметров | техническая обработка PNG и эксперименты |
| PNGOUT | CLI, есть сторонние оболочки | сильное Deflate-сжатие | может быть медленным, требует подбора параметров | максимальное сжатие отдельных PNG |
| AdvanceCOMP / advpng | CLI | рекомпрессия PNG через 7-Zip Deflate | ограниченная универсальность | дополнительный проход по IDAT |
| Oxipng | CLI | скорость, удобная массовая обработка, современный workflow | не исследовательский инструмент уровня Pngwolf | регулярная оптимизация PNG в проектах |
| pngquant | CLI / библиотеки / оболочки | сильное уменьшение через палитризацию | lossy-подход, меняет цветовое представление | когда допустим PNG-8 и потери цвета |
Pngwolf и OptiPNG
OptiPNG проще для повседневного использования. Его легко установить, легко запустить, он хорошо подходит для стандартной lossless-оптимизации PNG. Команда вида:
optipng -o7 image.png
понятна и предсказуема. OptiPNG проверяет разные параметры и может уменьшать файл без изменения изображения. Для большинства пользователей это более удобный первый выбор.
Pngwolf отличается тем, что сосредоточен на поиске последовательности фильтров. Он не просто применяет набор стандартных попыток, а использует генетический алгоритм. Поэтому его стоит запускать после OptiPNG, если нужно проверить, остался ли дополнительный резерв. В обычной работе OptiPNG быстрее и проще, Pngwolf глубже и точнее в своей узкой задаче.
Практичная схема:
optipng -o7 image.png
pngwolf --in=image.png --out=image.final.png --max-stagnate-time=10
Pngwolf и pngcrush
pngcrush — классический консольный инструмент для PNG, который умеет пробовать разные методы сжатия, работать с чанками и выполнять технические операции над PNG-файлом. Он шире Pngwolf по общему набору задач. В pngcrush можно управлять многими аспектами PNG, включая служебные чанки.
Pngwolf уже по специализации. Его центр — фильтры строк и Deflate. Если нужно комплексно обработать PNG, удалить или изменить служебные данные, pngcrush может быть удобнее. Если нужно именно проверить, можно ли найти лучшую filter sequence, Pngwolf интереснее.
Оптимальная схема — использовать их не вместо друг друга, а последовательно:
pngcrush -brute input.png crushed.png
pngwolf --in=crushed.png --out=final.png --max-stagnate-time=10
Pngwolf и PNGOUT
PNGOUT известен как сильный инструмент для сжатия PNG через собственный Deflate-подход. Он часто показывает хорошие результаты на отдельных файлах, но может требовать времени и подбора параметров. В этом смысле PNGOUT и Pngwolf похожи: оба интересны тем, кто готов ждать ради меньшего размера.
Разница в акценте. PNGOUT силен как Deflate-оптимизатор, а Pngwolf силен в поиске фильтров строк. Если PNGOUT уже хорошо пересжал данные, Pngwolf может быть полезен как дополнительная проверка filter sequence. Если Pngwolf нашел лучшую последовательность, сильный финальный Deflate может дополнительно повлиять на результат.
Для одного важного файла можно сравнить оба варианта и оставить меньший:
pngout input.png pngout.png
pngwolf --in=input.png --out=pngwolf.png --max-stagnate-time=20
Pngwolf и AdvanceCOMP / advpng
AdvanceCOMP, в частности advpng, применяется для рекомпрессии PNG. Он проще по сценарию: запустить утилиту на файле и получить уменьшение за счет повторного сжатия. Для типового дополнительного прохода это удобно.
Pngwolf более исследовательский. Он не только пересжимает IDAT, но и ищет лучшую последовательность PNG-фильтров. Если нужно быстро прогнать набор файлов, advpng проще. Если нужно добиться минимального размера отдельного PNG и проверить фильтры, Pngwolf полезнее.
Схема может быть такой:
advpng -z4 image.png
pngwolf --in=image.png --out=image.final.png --max-stagnate-time=10
Pngwolf и Oxipng
Oxipng — современный PNG optimizer, написанный на Rust. Он удобен для регулярной работы: хорошо подходит для массовой обработки, пакетных команд, pre-commit hooks, CI/CD и проектов, где важна скорость. Для большинства современных workflow Oxipng практичнее Pngwolf.
Pngwolf уступает Oxipng по удобству установки и скорости, но остается интересным как точечный инструмент для финального добора. Oxipng удобно запускать на всей папке, а Pngwolf — на отобранных файлах после первого прохода.
Пример:
oxipng -o 4 --strip safe --alpha assets/*.png
pngwolf --in=assets/logo.png --out=assets/logo.final.png --max-stagnate-time=10
Если нужен быстрый, надежный и понятный процесс для команды разработчиков, Oxipng будет проще. Если нужно исследовать конкретный PNG и попробовать необычный подбор фильтров, Pngwolf дает больше технической глубины.
Pngwolf и pngquant
pngquant решает другую задачу. Он уменьшает PNG за счет преобразования 24/32-битного изображения в палитровый PNG с ограниченным количеством цветов. Это может дать огромный выигрыш, но такой метод не равен строгой lossless-оптимизации. Цвета могут измениться, пусть часто и незаметно.
Pngwolf не заменяет pngquant. Если допустима палитризация, pngquant часто даст гораздо меньший файл. Если важно сохранить исходное цветовое представление, Pngwolf подходит лучше.
Практический подход:
pngquant --quality=80-95 image.png
pngwolf --in=image-fs8.png --out=image-fs8.final.png --max-stagnate-time=10
Но такой сценарий уже включает lossy-этап через pngquant, поэтому его нужно применять только там, где это допустимо.
Рекомендованная цепочка оптимизации
Для веб-графики Pngwolf лучше использовать не первым, а финальным инструментом. Хорошая цепочка выглядит так:
-
Подготовить исходное изображение в редакторе.
-
Экспортировать PNG без лишнего масштабирования.
-
Прогнать PNG через быстрый универсальный оптимизатор.
-
Проверить, нужна ли палитризация.
-
Для PNG, которые должны остаться RGB/RGBA, запустить Pngwolf.
-
Для RGBA-иконок отдельно протестировать
--normalize-alpha. -
Сравнить размеры.
-
Оставить меньший файл.
-
Проверить отображение в браузере или приложении.
-
Не удалять исходники.
Пример для RGB/RGBA PNG без палитризации:
oxipng -o 4 --strip safe image.png
pngwolf --in=image.png --out=image.final.png --max-stagnate-time=10
Пример для прозрачной иконки:
oxipng -o 4 --strip safe icon.png
pngwolf --in=icon.png --out=icon.final.png --normalize-alpha --max-stagnate-time=10
Пример для аккуратного сохранения метаданных:
pngwolf --in=image.png --out=image.final.png --max-stagnate-time=10
В последнем варианте не используются --strip-optional и --strip-chunk, поэтому риск удалить важные служебные данные ниже.
Безопасность работы и сохранение оригиналов
Pngwolf лучше использовать так, чтобы исходные файлы оставались нетронутыми. Даже если программа работает корректно, любая оптимизация ассетов должна быть обратимой. Самый безопасный вариант — отдельная папка для результата.
mkdir -p optimized
pngwolf --in=source/icon.png --out=optimized/icon.png --max-stagnate-time=10
Для проекта с Git удобно хранить исходные файлы в одной папке, а оптимизированные — в другой. Если оптимизированные изображения коммитятся в репозиторий, изменения можно посмотреть через diff по размерам. Если они генерируются автоматически, лучше добавить скрипт оптимизации в сборочный процесс.
Для важных изображений после Pngwolf стоит проверить:
-
файл открывается в браузере;
-
прозрачность отображается правильно;
-
цвета не изменились визуально;
-
размер действительно меньше;
-
файл не стал больше;
-
нужные метаданные не удалены;
-
нет проблем с путями в проекте.
Параметр --even-if-bigger лучше не использовать в обычной оптимизации. Он нужен для специальных тестов, когда важно сохранить результат даже при увеличении IDAT. Для веб-графики это почти всегда нежелательно.
Итоговая оценка
Pngwolf PNG Optimizer — узкая, техническая и полезная программа для тех, кто хочет оптимизировать PNG глубже, чем это делает обычный быстрый компрессор. Ее сила — генетический подбор scanline-фильтров, работа с IDAT, подробный вывод, контроль времени оптимизации и возможность добрать дополнительное уменьшение после других инструментов.
Это не программа для новичка и не замена графическим приложениям. У Pngwolf нет привычного интерфейса, нет предпросмотра, нет кнопки пакетного запуска и нет универсальной поддержки форматов. Он требует терминала, понимания параметров и аккуратного отношения к исходникам. Но именно за счет этой технической направленности программа остается интересной.
Pngwolf лучше всего подходит для финальной оптимизации PNG-иконок, прозрачных UI-элементов, логотипов, веб-графики и отдельных важных файлов, где стоит потратить дополнительное время ради меньшего размера. В связке с OptiPNG, pngcrush, PNGOUT, AdvanceCOMP или Oxipng он работает особенно логично: другие инструменты делают базовую оптимизацию, а Pngwolf проверяет, можно ли улучшить фильтры строк и пересжать IDAT эффективнее.
Для массовой повседневной обработки проще выбрать Oxipng или OptiPNG. Для палитризации — pngquant. Для финального технического добора размера у RGB/RGBA PNG Pngwolf остается сильным инструментом, особенно когда важны контроль, логи и точная работа с внутренним устройством PNG-файла.