Pngwolf — специализированный PNG оптимизатор для сжатия PNG без потерь, рассчитанный не на массовую обработку в один клик, а на более точную работу с внутренним устройством PNG-файла. Программа уменьшает размер PNG-изображений за счёт подбора scanline filters — фильтров строк изображения — и последующего Deflate-сжатия. Главная идея Pngwolf в том, что размер PNG зависит не только от самого компрессора, но и от того, как подготовлены данные перед упаковкой в IDAT chunks. Для каждой строки PNG можно выбрать один из фильтров, и удачная комбинация таких фильтров часто делает данные заметно более удобными для сжатия. Pngwolf как раз ищет такие комбинации не простым перебором, а генетическим алгоритмом.
Программа работает через командную строку. У неё нет графического окна, кнопок Open, Start, Save, панели предпросмотра или drag-and-drop зоны. Интерфейс Pngwolf — это набор параметров запуска: --in, --out, --max-stagnate-time, --max-time, --max-evaluations, --normalize-alpha, --verbose, --info, --7zip-mpass, --7zip-mfb, --7zip-mmc, --zlib-level и другие ключи. Поэтому обзор Pngwolf нужно воспринимать как обзор CLI-программы: вместо элементов окна здесь важны команды, режимы, ограничения, диагностический вывод и сценарии использования.

Pngwolf занимает узкую нишу среди программ для оптимизации PNG. Он не пытается быть универсальным конвертером изображений, не заменяет редактор графики, не меняет формат на WebP или AVIF и не делает агрессивное уменьшение палитры. Это инструмент для тех случаев, когда уже есть PNG-файл, и нужно выжать из него дополнительные проценты сжатия без визуального изменения картинки. Особенно хорошо Pngwolf раскрывается на RGB и RGBA PNG, где выбор фильтров строк может заметно влиять на итоговый размер IDAT-данных. При этом программа не поддерживает interlaced PNG и не занимается палитризацией или удалением невидимых метаданных.
Скачать Pngwolf
- Ретушь фото
- Русский интерфейс
- Просто для новичков
- Только командная строка
- Не для ретуши фото
- Только PNG-сжатие
Краткое описание Pngwolf
Pngwolf — open-source утилита для минимизации размера PNG image files. Она работает с уже существующим PNG-файлом, читает его структуру, распаковывает IDAT-данные, анализирует фильтры строк, строит набор возможных filter combinations, оценивает их через zlib, а финальный результат записывает через Deflate-энкодер из 7-Zip. Такой подход делает программу медленнее обычных PNG-оптимизаторов, но даёт ей сильную сторону: Pngwolf ищет не просто хорошие настройки компрессии, а более удачное расположение данных перед сжатием.
В обычном PNG каждая строка изображения перед сжатием может быть преобразована одним из фильтров. Эти фильтры не ухудшают изображение: они меняют представление пиксельных данных так, чтобы Deflate чаще находил повторения, похожие последовательности и короткие описания различий. Но для изображения высотой в сотни или тысячи строк возможных комбинаций слишком много. Если у каждой строки есть пять вариантов фильтра, полный перебор становится практически невозможным уже на сравнительно небольших картинках. Pngwolf решает эту задачу через генетический алгоритм: берёт исходные и эвристические варианты, добавляет случайные комбинации, оценивает их, скрещивает удачные последовательности и постепенно улучшает результат.
В практическом смысле Pngwolf полезен как финальный PNG optimizer. Его разумно использовать тогда, когда файл уже приведён к правильному типу, не содержит лишних данных, не требует палитризации, но всё ещё может быть пересобран с более удачной последовательностью фильтров. Это не самый удобный инструмент для новичка, зато он хорошо вписывается в цепочку оптимизации ассетов для сайта, игры, интерфейса или библиотеки изображений.
Что делает Pngwolf
Pngwolf выполняет несколько конкретных задач, каждая из которых связана именно с внутренней структурой PNG:
-
читает входной PNG через параметр
--in; -
анализирует IHDR и IDAT-данные;
-
распаковывает deflated image data;
-
определяет исходные scanline filters;
-
строит набор начальных фильтровых последовательностей;
-
оценивает, насколько хорошо разные фильтры сжимаются;
-
запускает genetic algorithm для поиска лучшей комбинации;
-
использует zlib как быстрый оценщик;
-
применяет Deflate-энкодер 7-Zip для финального результата;
-
сохраняет выходной PNG через
--out; -
при необходимости выводит подробный YAML-подобный отчёт;
-
может сохранить исходные и лучшие IDAT-данные отдельно через
--original-idat-toи--best-idat-to; -
умеет нормализовать полностью прозрачные пиксели через
--normalize-alpha.
Команда базового использования выглядит так:
pngwolf --in=input.png --out=output.png
Это минимальный рабочий сценарий: программа берёт input.png, ищет более выгодную комбинацию фильтров и сохраняет результат в output.png. Если выходной файл не указан, Pngwolf анализирует и оптимизирует данные, но не сохраняет PNG, потому что --out в справке программы описан как выходной файл, который по умолчанию не создаётся.
Для более управляемого запуска используется ограничение по времени без улучшений:
pngwolf --in=input.png --out=output.png --max-stagnate-time=10
Параметр --max-stagnate-time задаёт момент остановки: Pngwolf прекращает поиск, когда в течение указанного количества секунд не находит улучшения. Это один из ключевых параметров программы, потому что генетический поиск может продолжаться долго, а практический выигрыш часто находится в первые секунды или десятки секунд.
Чего Pngwolf не делает
Pngwolf важно оценивать без завышенных ожиданий. Это не универсальная программа для всех вариантов оптимизации изображений, а точечный инструмент для PNG-фильтров и Deflate-сжатия. Он не выполняет ряд операций, которые часто ассоциируются с оптимизаторами картинок:
| Задача | Делает ли Pngwolf | Комментарий |
|---|---|---|
| Уменьшение PNG без визуальной потери | Да | Основной сценарий работы |
| Подбор scanline filters | Да | Главная функция программы |
| Генетический поиск фильтров | Да | Ключевое отличие Pngwolf |
| Финальное Deflate-сжатие через 7-Zip | Да | Используется для записи результата |
| Палитризация PNG-24 в PNG-8 | Нет | Программа не меняет способ хранения цветов |
| Удаление метаданных | Нет | Для этого нужны другие PNG tools |
| Конвертация PNG в WebP/AVIF | Нет | Pngwolf работает именно с PNG |
| GUI с кнопками и предпросмотром | Нет | Программа консольная |
| Поддержка interlaced PNG | Нет | Такие файлы не являются целевым сценарием |
| Массовая быстрая обработка для всех | Ограниченно | Возможна через скрипты, но программа не про скорость |
Этот набор ограничений не делает Pngwolf слабой программой. Наоборот, он показывает её реальную специализацию. Pngwolf не пытается решать все задачи оптимизации PNG сразу. Он делает одну сложную вещь: ищет более выгодное представление scanline data перед Deflate. Именно поэтому его часто логичнее использовать не вместо OptiPNG, pngcrush, oxipng или advpng, а рядом с ними в цепочке оптимизации. Разные инструменты затрагивают разные аспекты PNG, а Pngwolf обычно имеет смысл запускать последним или предпоследним, потому что другие оптимизаторы могут не сохранять исходную фильтровую комбинацию.
Кому подойдёт Pngwolf
Pngwolf подходит пользователям, которым важен не красивый интерфейс, а контролируемый результат. Это программа для тех, кто готов работать с командной строкой и понимает, что экономия даже 1–3% может быть оправданной, если речь идёт о большом наборе PNG-ассетов или о файлах, которые будут многократно загружаться пользователями.
Наиболее логичные категории пользователей:
-
веб-разработчики, оптимизирующие PNG-иконки, логотипы, UI-графику и прозрачные изображения;
-
разработчики интерфейсов, которым нужны компактные RGBA-ресурсы;
-
разработчики игр, работающие с PNG-спрайтами и текстурами;
-
специалисты по web performance, которым важно уменьшить общий вес статики;
-
энтузиасты lossless compression;
-
авторы сборочных пайплайнов, где PNG-файлы проходят несколько стадий обработки;
-
пользователи, которые уже применяют OptiPNG, pngcrush, oxipng, pngout или AdvanceCOMP и хотят проверить дополнительный выигрыш.
Pngwolf особенно уместен, когда есть небольшой набор важных PNG-файлов. Например, логотипы, элементы интерфейса, спрайты, фавиконки, декоративные RGBA-картинки, изображения с альфа-каналом. Для огромной папки случайных скриншотов программа тоже может применяться, но без разумных лимитов по времени это быстро превращается в долгую задачу.
Состояние проекта и техническая основа
Pngwolf написан на C++ и построен вокруг нескольких компонентов: собственная логика чтения и перепаковки PNG, GAlib для генетического алгоритма, zlib для быстрой оценки сжатия и Deflate-реализация 7-Zip для финальной упаковки. В исходном коде явно присутствуют перечисления PNG-фильтров None, Sub, Up, Avg, Paeth, структуры PNG chunks и обработка IHDR/IDAT/IEND.
Программа распространяется как исходный код и не делает ставку на готовый пользовательский инсталлятор. Это важная практическая особенность: Pngwolf не похож на типичный Windows-оптимизатор с мастером установки. Чтобы встроить его в рабочий процесс, обычно используют уже собранный бинарник из сторонней цепочки инструментов или собирают программу самостоятельно. Для сборки нужны GAlib, 7-Zip Source code и zlib; эти зависимости размещаются в каталогах galib, 7zip и zlib рядом с pngwolf.cxx, после чего используется CMake или ручная сборка через компилятор.
Это делает Pngwolf менее удобным для широкой аудитории, но вполне нормальным для разработчика. Утилита рассчитана на работу в скриптах, CI-задачах, локальных инструментах подготовки ассетов и ручном тестировании отдельных файлов.
Интерфейс Pngwolf
Интерфейс Pngwolf — это командная строка. У программы нет окна, в котором пользователь выбирает файл мышью. Все действия задаются параметрами. С точки зрения пользователя, элементы интерфейса Pngwolf — это ключи запуска и строки вывода.
Основная форма команды:
pngwolf --in=file.png --out=file.png
Здесь:
-
pngwolf— исполняемый файл программы; -
--in=file.png— путь к исходному PNG; -
--out=file.png— путь для сохранения оптимизированного PNG.
Если нужно сохранить исходный файл нетронутым, выходной путь должен отличаться от входного:
pngwolf --in=logo.png --out=logo.optimized.png
Для каталогов обычно используют оболочку или batch-скрипт. Например, в Unix-подобной среде:
mkdir -p optimizedfor file in *.png; do pngwolf --in="$file" --out="optimized/$file" --max-stagnate-time=5done
В Windows batch-логике можно использовать похожий принцип:
mkdir optimizedfor %%A in (*.png) do ( pngwolf.exe --in="%%A" --out="optimized\%%A" --max-stagnate-time=5)
Важно, что Pngwolf сам по себе не является менеджером очереди. Он обрабатывает один входной файл за запуск. Массовая обработка строится поверх него через скрипт, make-задачу, npm script, Python-обвязку, PowerShell или другой инструмент автоматизации.
Основные параметры Pngwolf
У Pngwolf много параметров, но для практической работы достаточно хорошо понимать несколько групп.
Вход и выход
| Параметр | Назначение |
|---|---|
--in= |
Входной PNG-файл |
--out= |
Выходной PNG-файл |
--original-idat-to= |
Сохранить исходные IDAT-данные в gzip-контейнер |
--best-idat-to= |
Сохранить лучшие IDAT-данные в gzip-контейнер |
Параметры --original-idat-to и --best-idat-to нужны не обычному пользователю, а тем, кто анализирует работу с IDAT-данными. Они помогают сравнивать исходный поток и найденный лучший поток отдельно от общей PNG-обёртки.
Ограничение времени и объёма поиска
| Параметр | Назначение |
|---|---|
--max-time= |
Остановить работу после заданного количества секунд |
--max-stagnate-time= |
Остановить поиск, если нет улучшений указанное число секунд |
--max-evaluations= |
Остановить после заданного числа оценённых геномов |
--max-deflate= |
Остановить после заданного объёма дефлирования в мегабайтах |
Самый практичный ключ — --max-stagnate-time. Он останавливает Pngwolf не просто по таймеру, а по отсутствию улучшений. Для большинства рабочих сценариев это лучше, чем бездумно давать программе фиксированные две минуты на каждый файл. Если улучшения закончились, продолжение поиска часто даёт малый шанс на небольшую экономию, но продолжает тратить процессорное время.
Настройка генетического поиска
| Параметр | Назначение |
|---|---|
--population-size= |
Размер популяции фильтровых комбинаций |
--exclude-singles |
Исключить single-filter genomes |
--exclude-original |
Исключить фильтры исходного изображения |
--exclude-heuristic |
Исключить эвристически сгенерированные фильтры |
--exclude-experiments |
Исключить экспериментальные эвристики |
--bigger-is-better |
Искать фильтры, которые сжимаются хуже |
Для обычной оптимизации эти параметры трогают редко. Они полезнее при исследовании PNG-фильтров, сравнении эвристик и тестировании поведения генетического алгоритма. --bigger-is-better особенно показателен: это не режим для уменьшения файлов, а исследовательский режим, в котором программа ищет последовательности фильтров, ухудшающие сжатие.
Настройки zlib-оценщика
| Параметр | Назначение |
|---|---|
--zlib-level= |
Уровень zlib-сжатия для оценки |
--zlib-strategy= |
Стратегия zlib |
--zlib-window= |
Размер окна zlib |
--zlib-memlevel= |
Уровень памяти zlib |
Pngwolf использует zlib как быстрый оценщик того, насколько хорошо конкретная последовательность фильтров подготовила данные к Deflate. Это не финальная упаковка в типичном сценарии, а способ быстро сравнить много вариантов. Чем тяжелее настройки zlib, тем дороже становится оценка каждого кандидата.
Настройки 7-Zip Deflate
| Параметр | Назначение |
|---|---|
--7zip-mfb= |
Fast bytes, диапазон 3–258 |
--7zip-mpass= |
Количество проходов 7-Zip, больше — медленнее и потенциально компактнее |
--7zip-mmc= |
Match finder cycles |
Эти параметры относятся к финальной упаковке данных. Pngwolf использует 7-Zip Deflate, потому что при некоторых настройках он ориентирован на более высокий коэффициент сжатия, пусть и ценой времени. Для обычного запуска достаточно значений по умолчанию или умеренно усиленного режима. Максимальные настройки стоит включать только для небольшого набора важных файлов.
Диагностика и подробный вывод
| Параметр | Назначение |
|---|---|
--verbose-analysis |
Подробности первичного анализа изображения |
--verbose-summary |
Подробная сводка после оптимизации |
--verbose-genomes |
Подробности при найденных улучшениях |
--verbose |
Включает все verbose-режимы |
--info |
Вывести подробный анализ и завершить работу |
--help |
Показать справку |
Режим --info особенно полезен перед оптимизацией. Он позволяет увидеть параметры изображения, IDAT-данные, фильтры и потенциальные особенности прозрачности, не запуская полный поиск.
Как работает оптимизация PNG в Pngwolf
PNG использует фильтры строк, чтобы подготовить пиксельные данные к сжатию. У каждой строки может быть один из пяти фильтров:
| Код | Фильтр | Идея |
|---|---|---|
| 0 | None |
Данные строки остаются без фильтра |
| 1 | Sub |
Значения связываются с соседними пикселями слева |
| 2 | Up |
Значения связываются с пикселями из предыдущей строки |
| 3 | Avg |
Используется среднее между левым и верхним соседями |
| 4 | Paeth |
Используется предиктор Paeth |
Фильтр не меняет изображение в визуальном смысле. Он меняет способ записи данных перед Deflate. Например, если в строке идёт плавный градиент, вместо последовательности значений можно получить последовательность небольших различий. Такие различия часто лучше сжимаются.
Pngwolf сначала снимает исходные фильтры и строит несколько вариантов: исходная последовательность, одинаковые фильтры для всех строк, базовая эвристика, экспериментальные эвристики, случайные последовательности. Затем программа оценивает эти варианты и начинает эволюционный поиск. В терминах Pngwolf одна последовательность фильтров — это genome. Геном содержит выбор фильтра для каждой scanline. Если картинка имеет высоту 600 пикселей, геном фактически содержит 600 решений: какой фильтр использовать для каждой строки.
Генетический алгоритм делает три важные вещи:
-
Оценивает кандидатов.
Pngwolf применяет последовательность фильтров к данным и измеряет, насколько хорошо результат сжимается. -
Сохраняет лучшие варианты.
Если новая комбинация даёт меньший zlib deflated idat size, она становится кандидатом на лучший результат. -
Скрещивает удачные последовательности.
У двух разных фильтровых комбинаций могут быть сильные участки: одна хорошо работает на верхней части изображения, другая — на нижней. Pngwolf может объединить начало одной последовательности с концом другой и получить более компактный вариант.
Именно эта логика отличает Pngwolf от классического перебора нескольких предустановленных режимов. Программа не просто пробует уровень 1, 2, 3, 4, а работает с фильтрами на уровне каждой строки изображения.
Роль IDAT chunks
В PNG основные сжатые данные изображения лежат в IDAT chunks. Для пользователя это обычно невидимая часть файла, но для Pngwolf это центральный объект работы. Программа читает IDAT, распаковывает deflated data, применяет другие фильтры, снова сжимает данные и сравнивает размер. В выводе Pngwolf часто важен не общий размер файла, а размер deflated IDAT data, потому что именно он показывает, насколько удачно подготовлена и упакована пиксельная информация.
На практике общий размер PNG может зависеть и от других chunks: текстовых данных, цветовых профилей, гаммы, времени создания, редакторских метаданных. Pngwolf не занимается удалением этих частей. Поэтому файл с большим количеством ancillary chunks может остаться крупным даже после удачной оптимизации IDAT. Для таких случаев перед Pngwolf используют инструменты, которые умеют удалять или нормализовать дополнительные chunks.
Нормализация прозрачности и --normalize-alpha
У Pngwolf есть отдельный режим для RGBA PNG — --normalize-alpha. Он делает полностью прозрачные пиксели чёрными. Это звучит странно, но для PNG с альфа-каналом имеет практический смысл.
В RGBA-изображении пиксель может быть полностью прозрачным, то есть его alpha равна нулю. Визуально такой пиксель не виден. Но его RGB-значения всё равно могут быть записаны в файл. Например, полностью прозрачный белый пиксель может быть представлен как 0xFFFFFF00, а прозрачный чёрный — как 0x00000000. Визуально оба пикселя одинаково невидимы, но для компрессора это разные данные. Если в прозрачных областях хаотично лежат белые, серые, цветные и чёрные значения, Deflate может сжимать такую область хуже.
Параметр:
pngwolf --in=icon.png --out=icon.optimized.png --normalize-alpha
превращает полностью прозрачные пиксели в прозрачный чёрный. Это может уменьшить размер RGBA PNG, особенно если прозрачные области пришли из графического редактора с грязными невидимыми цветами. В примере с полностью прозрачными пикселями размер IDAT после такой нормализации уменьшался с 1748 до 1240 байт, то есть примерно на 29%.

У --normalize-alpha есть важное ограничение: это не строгое lossless-преобразование на уровне всех пиксельных данных. Визуально полностью прозрачные пиксели не меняются, но их скрытые RGB-значения изменяются. Для обычной веб-графики это чаще всего приемлемо. Для технических изображений, игровых ресурсов, специальных текстур, карт нормалей, данных в PNG или нестандартных пайплайнов такой режим нельзя включать автоматически без проверки.
Практическое правило простое:
-
для обычных иконок, UI-элементов, логотипов и прозрачной веб-графики
--normalize-alphaчасто полезен; -
для файлов, где RGB-значения прозрачных пикселей могут использоваться программно, режим лучше не применять;
-
для архивного хранения оригиналов его стоит использовать только на копиях.
Практическая инструкция: оптимизация одного PNG
Базовый рабочий процесс выглядит так:
-
Сохранить исходный файл отдельно.
-
Запустить Pngwolf с явным входом и выходом.
-
Проверить размер результата.
-
Проверить визуальное совпадение.
-
При необходимости повторить с другими ограничениями времени.
Пример:
pngwolf --in=source.png --out=source.pwolf.png
После завершения программа выводит краткий результат. В обычном режиме в конце можно увидеть, стал ли IDAT меньше или больше. Логика summary показывает разницу между исходным deflated IDAT и лучшим найденным deflated IDAT: если результат меньше, выводится сообщение вида # N bytes smaller; если больше — # N bytes bigger. При этом без --even-if-bigger программа сохраняет исходный вариант, если найденный вариант хуже.
Для более информативного запуска:
pngwolf --in=source.png --out=source.pwolf.png --verbose-summary
В этом режиме Pngwolf выводит:
-
лучшую найденную последовательность фильтров;
-
лучший zlib deflated idat size;
-
общее время оптимизации;
-
количество оценённых genomes;
-
размер 7zip deflated data;
-
разницу с исходным размером.
Если нужно увидеть первичный анализ без полноценной оптимизации:
pngwolf --in=source.png --info
--info включает verbose analysis и завершает работу после отчёта. Это удобно, когда нужно понять, подходит ли файл для Pngwolf: какой у него color mode, depth, interlace, размер IDAT, какие chunks присутствуют, есть ли полностью прозрачные пиксели с разными скрытыми цветами.
Практическая инструкция: запуск с ограничением времени
Pngwolf может работать долго, поэтому для реальной работы почти всегда нужен лимит. Самый полезный вариант:
pngwolf --in=source.png --out=source.pwolf.png --max-stagnate-time=5
Такой запуск говорит программе: продолжай поиск, пока находишь улучшения, но прекращай, если в течение 5 секунд нет результата лучше предыдущего. Это хорошо подходит для набора PNG-ассетов, где важна разумная скорость.
Для более тщательной обработки:
pngwolf --in=source.png --out=source.pwolf.png --max-stagnate-time=10
Для жёсткого верхнего лимита:
pngwolf --in=source.png --out=source.pwolf.png --max-time=60
--max-time=60 ограничивает всё время работы одной минутой. Но этот вариант грубее: Pngwolf может остановиться, даже если улучшения ещё появляются. Поэтому --max-stagnate-time лучше отражает реальную динамику поиска.
Можно ограничить не время, а число оценённых вариантов:
pngwolf --in=source.png --out=source.pwolf.png --max-evaluations=10000
Такой подход полезен при сравнительных тестах, когда нужно одинаковое количество попыток для разных файлов или разных настроек.
Практическая инструкция: усиленный режим
Для файлов, где важен каждый байт, используют более тяжёлые настройки:
pngwolf \ --in=source.png \ --out=source.pwolf.png \ --max-stagnate-time=10 \ --7zip-mpass=15 \ --7zip-mmc=258 \ --7zip-mfb=258 \ --zlib-level=9
Этот режим повышает качество оценки и финального Deflate-сжатия, но заметно увеличивает время. Его не стоит применять ко всем файлам подряд без тестов. На маленькой иконке разница может быть измерима, а на большом PNG программа может потратить много времени ради минимального выигрыша.
Усиленный режим уместен в таких случаях:
-
финальная публикация набора иконок;
-
подготовка ассетов для сайта с высокой посещаемостью;
-
конкурсное или исследовательское сравнение PNG-оптимизаторов;
-
оптимизация небольшого числа файлов, которые часто загружаются;
-
подготовка встроенных ресурсов, где каждый килобайт важен.
Неудачный сценарий — запуск максимальных настроек на тысячах скриншотов без предварительного теста. Pngwolf способен работать долго, потому что каждое изменение фильтра требует новой оценки сжатия.
Практическая инструкция: использование после других оптимизаторов
Pngwolf не заменяет инструменты, которые меняют структуру PNG другими способами. Поэтому сильный рабочий процесс часто выглядит так:
-
Проверить, нужен ли вообще PNG.
-
Если PNG остаётся, выбрать правильный тип изображения.
-
При необходимости уменьшить палитру другим инструментом.
-
Удалить ненужные chunks другим оптимизатором.
-
Прогнать файл через OptiPNG, pngcrush, oxipng, pngout или advpng.
-
Запустить Pngwolf как финальный проход.
-
Проверить результат и оставить меньший файл.
Pngwolf особенно логичен на последнем этапе, потому что его сильная сторона — filter selection. Если после него снова запустить инструмент, который пересобирает PNG и меняет фильтры, результат Pngwolf может быть потерян.
Пример цепочки с сохранением промежуточных файлов:
optipng -o7 source.png -out source.optipng.pngpngwolf --in=source.optipng.png --out=source.final.png --max-stagnate-time=10
Пример с oxipng:
oxipng -o 4 --strip safe --alpha source.png --out source.oxipng.pngpngwolf --in=source.oxipng.png --out=source.final.png --max-stagnate-time=10
Здесь важно понимать различие: oxipng умеет делать быстрый lossless PNG/APNG optimization, работать с metadata stripping и alpha-optimization, а Pngwolf специализируется на генетическом подборе scanline filters. Поэтому они не полностью дублируют друг друга.
Подробный вывод и диагностика
Pngwolf удобен не только как компрессор, но и как инструмент анализа PNG. В verbose-режимах он показывает данные, которые помогают понять, что происходит с файлом.
Команда:
pngwolf --in=source.png --info
выводит анализ изображения. Pngwolf формирует YAML-подобный отчёт с такими полями, как:
-
путь к изображению;
-
ширина и высота в пикселях;
-
color mode;
-
bit depth;
-
interlaced;
-
scanline width;
-
scanline delta;
-
inflated idat size;
-
deflated idat size;
-
chunks present;
-
invisible colors для RGBA;
-
zlib deflated idat sizes для разных фильтров;
-
original filters;
-
basic heuristic filters;
-
deflate scanline filters;
-
distinct bytes filters;
-
distinct bigrams filters;
-
incremental filters.
Это делает Pngwolf полезным для диагностики. Например, если --info показывает, что изображение interlaced, Pngwolf не является подходящим инструментом для прямой обработки такого файла. Если видно множество invisible colors у полностью прозрачных пикселей, стоит рассмотреть --normalize-alpha. Если разные эвристики дают близкий размер, большой выигрыш от долгого генетического поиска может быть маловероятен.
Для подробной сводки после оптимизации:
pngwolf --in=source.png --out=source.pwolf.png --verbose-summary
Для наблюдения за найденными улучшениями:
pngwolf --in=source.png --out=source.pwolf.png --verbose-genomes
Для полного диагностического вывода:
pngwolf --in=source.png --out=source.pwolf.png --verbose
--verbose включает --verbose-analysis, --verbose-summary и --verbose-genomes. Это хороший режим для тестирования одного файла, но не лучший режим для массовой обработки, потому что вывод становится слишком большим.
Форматы и ограничения
Pngwolf работает с PNG. Это не пакетный конвертер форматов и не универсальный image optimizer. Он не принимает JPEG, GIF, WebP, AVIF, TIFF или HEIC как входные форматы для оптимизации. Его задача — PNG image files.
Наиболее подходящие файлы:
-
RGB PNG;
-
RGBA PNG;
-
PNG без interlace;
-
изображения, где IDAT занимает значительную часть размера;
-
файлы, где палитра и метаданные уже приведены в порядок;
-
изображения с повторяемыми областями, градиентами, плоскими заливками, UI-структурой;
-
PNG, в которых исходный encoder выбрал не самые удачные фильтры.
Менее подходящие файлы:
-
interlaced PNG;
-
уже максимально выжатые PNG после нескольких сильных оптимизаторов;
-
маленькие файлы, где выигрыш будет в пределах нескольких байтов;
-
изображения, где основной вес файла дают метаданные, а не IDAT;
-
палитровые PNG, которые лучше сначала оптимизировать инструментом для палитры;
-
файлы, где важны скрытые RGB-значения полностью прозрачных пикселей.
Pngwolf не меняет color type, не переводит RGB в palette, не удаляет tEXt/iCCP/gAMA/sRGB chunks и не делает lossy quantization. Поэтому, если PNG раздут из-за лишних chunks или неправильного цветового типа, сначала нужен другой инструмент.
Производительность
Pngwolf медленнее многих PNG-оптимизаторов по своей природе. Он не просто один раз пересжимает файл, а многократно применяет разные фильтровые последовательности и оценивает, как они сжимаются. Для каждого genome программа фактически получает новый вариант filtered data и измеряет его deflated size. Чем больше изображение и чем больше строк, тем дороже оценка.
На скорость влияют:
| Фактор | Как влияет |
|---|---|
| Высота изображения | Больше строк — длиннее genome |
| Размер IDAT после распаковки | Больше данных — дороже каждая оценка |
--population-size |
Большая популяция увеличивает разнообразие, но требует больше оценок |
--max-stagnate-time |
Чем выше лимит, тем дольше поиск после последнего улучшения |
--zlib-level |
Высокий уровень делает оценку тяжелее |
--7zip-mpass |
Увеличивает время финального Deflate |
--verbose-genomes |
Увеличивает объём вывода |
--normalize-alpha |
Добавляет преобразование прозрачных пикселей, но может улучшить сжатие |
Pngwolf сам по себе не является многопоточным массовым обработчиком папок. Если нужно обрабатывать много файлов, параллелизм обычно делают снаружи: запускают несколько экземпляров программы на разных PNG. Но это нужно делать аккуратно, потому что каждый экземпляр может активно использовать CPU. Для тяжёлых файлов лучше ограничивать число параллельных процессов.
Пример GNU Parallel:
parallel -j 4 'pngwolf --in={} --out=optimized/{/} --max-stagnate-time=5' ::: *.png
Пример PowerShell:
Get-ChildItem *.png | ForEach-Object { .\pngwolf.exe --in="$($_.FullName)" --out="optimized\$($_.Name)" --max-stagnate-time=5}
Для реальной работы лучше сначала протестировать 10–20 типичных файлов, посмотреть среднюю экономию и время, а потом запускать на всём наборе.
Качество результата
В обычном режиме Pngwolf ориентирован на сохранение изображения. Он меняет фильтры строк и recompresses IDAT, но не должен визуально менять картинку. Это lossless compression в практическом смысле для пиксельного результата. Исключение — --normalize-alpha, потому что этот режим меняет RGB-компоненты полностью прозрачных пикселей. Видимый результат остаётся прежним, но невидимые данные меняются.
Проверять результат стоит на нескольких уровнях:
-
Размер файла.
Сравнить исходный PNG и выходной PNG. -
Визуальное открытие.
Убедиться, что файл открывается в браузере, просмотрщике, графическом редакторе или игровом движке. -
Пиксельное сравнение.
Для строгой проверки использовать инструмент, который сравнит видимые пиксели после декодирования. -
Проверка альфа-канала.
Для RGBA-изображений отдельно проверить прозрачные области, особенно если использовался--normalize-alpha. -
Проверка пайплайна.
Если PNG используется не просто как картинка, а как контейнер данных, нельзя полагаться только на визуальное совпадение.
Для обычной веб-графики Pngwolf безопаснее применять к копиям и затем заменять оригиналы только после проверки. Это особенно важно, потому что программа не занимается защитой пользовательского рабочего процесса: она выполняет то, что указано в командной строке.
Работа с полностью прозрачными пикселями
Отдельно стоит рассмотреть сценарий, где Pngwolf может быть особенно полезен: RGBA PNG с невидимым мусором в прозрачных областях. Такие файлы часто появляются после экспорта из редакторов изображений. Визуально прозрачная зона кажется пустой, но внутри неё могут лежать RGB-значения от старых слоёв, заливок, белого фона или сглаженных краёв.
Для Deflate это лишняя вариативность. Если большая прозрачная область содержит одинаковые значения, она хорошо сжимается. Если каждый невидимый пиксель имеет разный цвет, сжатие ухудшается. --normalize-alpha приводит полностью прозрачные пиксели к единому виду и тем самым может уменьшить IDAT.
Пример команды:
pngwolf --in=button.png --out=button.alpha.png --normalize-alpha --max-stagnate-time=5
Для UI-иконок это один из самых практичных режимов. Для изображений, где альфа-канал используется стандартно, полностью прозрачный пиксель с любым RGB всё равно не виден. Но в некоторых движках, шейдерах, текстурных атласах и нестандартных инструментах скрытый RGB может влиять на bleeding, mipmap generation или программную обработку. В таких случаях нужно проверять конкретный пайплайн.

Использование Pngwolf в сборочном процессе
Pngwolf хорошо встраивается в сборку проекта, если воспринимать его как финальный CLI-фильтр для PNG. Например, в веб-проекте можно держать исходники в папке assets/source, а оптимизированные файлы собирать в assets/build.
Пример структуры:
assets/ source/ logo.png icon-search.png icon-close.png hero-mask.png build/ logo.png icon-search.png icon-close.png hero-mask.png
Пример shell-скрипта:
#!/usr/bin/env bashset -emkdir -p assets/buildfor file in assets/source/*.png; do name="$(basename "$file")" pngwolf \ --in="$file" \ --out="assets/build/$name" \ --max-stagnate-time=5done
Для более осторожного режима можно сначала писать файлы с суффиксом:
pngwolf --in="$file" --out="assets/build/${name%.png}.pwolf.png" --max-stagnate-time=5
После этого размеры сравниваются автоматически, и в итоговую папку попадает меньший файл. Такая обвязка полезна, потому что Pngwolf сам по себе не является системой принятия решений для всего каталога.
В CI лучше не запускать тяжёлые настройки на каждом коммите. Практичнее разделить задачи:
-
быстрый режим
--max-stagnate-time=2для регулярной проверки; -
более медленный режим
--max-stagnate-time=10для релизной сборки; -
максимальные настройки только для финальной подготовки стабильного набора ассетов.
Pngwolf и пакетная обработка
Pngwolf не имеет собственной очереди файлов, но это не мешает использовать его пакетно. Главное — не запускать безлимитную оптимизацию на сотнях файлов одновременно.
Пример последовательной обработки:
for file in *.png; do pngwolf --in="$file" --out="optimized/$file" --max-stagnate-time=5done
Плюсы последовательной обработки:
-
стабильная нагрузка;
-
проще читать логи;
-
меньше риск перегрузить систему;
-
удобно искать файл, на котором возникла ошибка.
Минусы:
-
долго на больших наборах;
-
не использует несколько ядер полностью.
Пример параллельной обработки с ограничением:
find . -name "*.png" -print0 | xargs -0 -n 1 -P 4 -I {} sh -c ' mkdir -p optimized base=$(basename "{}") pngwolf --in="{}" --out="optimized/$base" --max-stagnate-time=5'
-P 4 ограничивает число одновременных процессов четырьмя. Это безопаснее, чем запускать Pngwolf сразу на всех PNG.
Типичные сценарии применения
Оптимизация PNG-иконок
Иконки часто содержат прозрачность, плоские области и повторяющиеся структуры. Для них Pngwolf может быть полезен после удаления метаданных и базовой оптимизации.
Команда:
pngwolf --in=icon.png --out=icon.min.png --normalize-alpha --max-stagnate-time=5
Здесь --normalize-alpha часто имеет смысл, потому что прозрачные края и пустые области иконок могут содержать невидимые цветовые значения.
Оптимизация логотипа
Логотипы в PNG могут быть RGB или RGBA. Если файл не должен менять палитру и должен остаться без потерь, Pngwolf можно использовать как финальный проход:
pngwolf --in=logo.png --out=logo.optimized.png --max-stagnate-time=10 --verbose-summary
--verbose-summary помогает понять, сколько реально дала программа, а не просто увидеть новый размер файла.
Оптимизация UI-спрайта
Спрайты и текстурные атласы могут быть большими, поэтому для них особенно важен лимит:
pngwolf --in=ui-atlas.png --out=ui-atlas.optimized.png --max-stagnate-time=5
Если атлас используется в движке, --normalize-alpha включают только после проверки, потому что скрытые цвета прозрачных пикселей иногда влияют на края при фильтрации текстур.
Анализ PNG без сохранения
pngwolf --in=asset.png --info
Этот режим полезен перед включением Pngwolf в пайплайн. Он позволяет понять, есть ли смысл оптимизировать конкретный файл, не создавая новый PNG.
Сохранение IDAT для исследования
pngwolf \ --in=source.png \ --out=source.optimized.png \ --original-idat-to=original.gz \ --best-idat-to=best.gz \ --max-stagnate-time=10
Этот сценарий нужен не всем. Он полезен, когда важно исследовать именно Deflate-потоки и сравнивать исходные и оптимизированные IDAT-данные.
Ошибки и неудачные случаи
Pngwolf может не дать заметного уменьшения. Это нормальная ситуация. Причин несколько:
-
файл уже хорошо оптимизирован;
-
PNG слишком маленький;
-
основной вес файла не в IDAT, а в метаданных;
-
изображение interlaced;
-
цветовой тип выбран неудачно, но Pngwolf его не меняет;
-
zlib-оценка выбрала вариант, который после финального 7-Zip Deflate не оказался лучше;
-
картинка не подходит под сильный выигрыш от refiltering.
Если Pngwolf сообщает, что вариант получился больше, это не означает ошибку. Программа сравнивает найденное с исходным. Без --even-if-bigger она использует исходный вариант, если новый хуже. Это разумное поведение для оптимизатора: лучше не портить размер файла ради формального нового результата.
Параметр --even-if-bigger нужен только для тестов:
pngwolf --in=source.png --out=larger-test.png --even-if-bigger
В обычной оптимизации его включать не стоит.
Сравнение с аналогами
Pngwolf правильнее сравнивать не с компрессорами картинок вообще, а с конкретными PNG-инструментами: OptiPNG, pngcrush, oxipng, AdvanceCOMP/advpng, pngout и zopflipng. У каждого из них своя логика.
| Программа | Основная роль | Где Pngwolf сильнее | Где Pngwolf слабее |
|---|---|---|---|
| OptiPNG | Recompress PNG без потерь, проверка и коррекция PNG | Может дополнительно улучшить scanline filters после обычной оптимизации | Менее удобен, обычно медленнее, не конвертирует внешние форматы в PNG |
| pngcrush | Подбор фильтров и zlib-параметров, работа с chunks | Использует генетический поиск фильтров, а не только набор стратегий | Не так универсален в манипуляциях с PNG chunks |
| oxipng | Современный быстрый lossless PNG/APNG optimizer | Может быть дополнительным финальным проходом для отдельных файлов | oxipng практичнее для массовой обработки, умеет strip metadata и alpha optimization |
| AdvanceCOMP / advpng | Recompression PNG/MNG/ZIP/GZ с Deflate 7-Zip | Pngwolf ищет более удачные фильтры строк | advpng проще как рекомпрессор и полезен не только для PNG |
| pngout | Сильное PNG/Deflate-сжатие | Pngwolf может выиграть за счёт другой фильтровой последовательности | pngout часто проще как самостоятельный оптимизатор |
| zopflipng | Очень сильное Deflate-сжатие через Zopfli | Pngwolf специализируется на genetic filter selection | zopflipng проще применять как медленный, но понятный PNG-оптимизатор |
OptiPNG — более удобный инструмент общего назначения. Он recompresses image files to a smaller size without losing information, а также умеет конвертировать некоторые внешние форматы в optimized PNG и выполнять integrity checks. Pngwolf не делает эти дополнительные операции, зато точнее фокусируется на фильтрах строк.
pngcrush ближе к Pngwolf по идеологии, потому что тоже работает с PNG-фильтрами и zlib-настройками. Но pngcrush использует перебор конкретных комбинаций filter_type и zlib_level, а Pngwolf эволюционно ищет последовательность фильтров по строкам. Поэтому Pngwolf интереснее именно там, где стандартные эвристики дают не лучший результат.
oxipng практичнее в большинстве современных рабочих процессов. Он быстрый, lossless, multithreaded, поддерживает PNG/APNG, умеет работать через CLI и как библиотека, имеет параметры --strip и --alpha. Pngwolf не конкурирует с ним по удобству массовой обработки, но может использоваться как дополнительный финальный проход для отдельных RGB/RGBA PNG.
AdvanceCOMP/advpng интересен тем, что тоже использует 7-Zip Deflate implementation для recompress PNG. Но advpng — это рекомпрессор, а Pngwolf — инструмент, который перед финальным сжатием ищет более удачный набор scanline filters.

Главный вывод из сравнения: Pngwolf не самый универсальный и не самый удобный PNG optimizer. Его сила — не сделать всё, а найти такие фильтры, которые другие инструменты могли не подобрать. Поэтому он особенно полезен в комбинации с другими программами.
Когда стоит использовать Pngwolf
Pngwolf стоит использовать, когда выполняются несколько условий:
-
файл действительно PNG;
-
изображение RGB или RGBA;
-
файл не interlaced;
-
размер важнее скорости;
-
пользователь готов работать с командной строкой;
-
уже применены базовые оптимизаторы;
-
нужно проверить, можно ли уменьшить IDAT ещё немного;
-
результат будет проверяться перед заменой оригинала.
Хороший пример — набор из 30 иконок сайта. Каждая иконка небольшая, но загружается на многих страницах. Сначала можно обработать их более быстрым инструментом, затем запустить Pngwolf с --max-stagnate-time=5 или --max-stagnate-time=10, сравнить итог и оставить меньшие файлы.
Ещё один хороший пример — финальный ассет для игры или приложения, который будет поставляться тысячам пользователей. Если Pngwolf экономит даже несколько килобайт без визуального изменения, это может быть оправдано.
Когда лучше выбрать другой инструмент
Pngwolf не лучший выбор, если задача выглядит так:
-
нужно быстро обработать тысячи PNG;
-
нужен графический интерфейс;
-
пользователь не хочет работать с командной строкой;
-
нужно удалить EXIF, текстовые chunks, цветовые профили;
-
нужно перевести PNG-24 в PNG-8;
-
нужно lossy-сжатие;
-
нужно конвертировать PNG в WebP или AVIF;
-
нужно оптимизировать APNG;
-
важна простота установки;
-
нужна универсальная программа для JPEG, PNG, GIF и WebP одновременно.
В таких случаях практичнее взять oxipng, OptiPNG, ImageOptim, FileOptimizer, Squoosh, pngquant или другой инструмент под конкретную задачу. Pngwolf имеет смысл тогда, когда понятна его узкая роль: генетический подбор PNG scanline filters и финальная recompression.
Плюсы Pngwolf
1. Узкая, но сильная специализация.
Pngwolf делает именно то, что редко делают простые оптимизаторы: ищет комбинации фильтров строк через genetic algorithm.
2. Хорош для RGB/RGBA PNG.
Программа особенно уместна на изображениях, где фильтры строк реально влияют на Deflate compression.
3. Может добрать размер после других инструментов.
Pngwolf можно использовать после OptiPNG, pngcrush, oxipng, advpng или pngout как дополнительный проход.
4. Есть лимиты остановки.
--max-stagnate-time, --max-time, --max-evaluations и --max-deflate позволяют контролировать время работы.
5. Есть подробный анализ.
--info и verbose-режимы делают Pngwolf полезным для диагностики PNG.
6. Есть режим для прозрачности.
--normalize-alpha может заметно уменьшить RGBA PNG с грязными полностью прозрачными пикселями.
7. При прерывании результат не должен теряться.
Pngwolf рассчитан на то, чтобы при Ctrl+C сохранить найденный результат, если он уже есть.
Минусы Pngwolf
1. Нет графического интерфейса.
Для пользователей, привыкших к кнопкам и окнам, Pngwolf неудобен.
2. Сложнее встроить без опыта командной строки.
Нужно понимать параметры, пути, batch/shell-скрипты и проверку результата.
3. Сборка требует зависимостей.
Для самостоятельной сборки нужны GAlib, zlib и исходный код 7-Zip.
4. Может работать медленно.
Генетический поиск и повторные Deflate-оценки дороже обычной recompression.
5. Не удаляет метаданные.
Если PNG раздут ancillary chunks, Pngwolf не решит проблему полностью.
6. Не делает палитризацию.
Для изображений с малым количеством цветов сначала нужен другой инструмент.
7. Не поддерживает interlaced PNG.
Такие файлы не подходят для прямой обработки Pngwolf.
8. Не всегда даёт выигрыш.
На уже хорошо оптимизированных PNG результат может быть нулевым или очень малым.
Безопасный рабочий процесс
Для Pngwolf лучше использовать осторожную схему:
mkdir optimizedpngwolf --in=source.png --out=optimized/source.png --max-stagnate-time=5
После этого:
-
Сравнить размер:
ls -lh source.png optimized/source.png -
Проверить открытие файла:
file optimized/source.png -
При необходимости сравнить пиксели через внешний инструмент.
-
Только после проверки заменить оригинал.
Для RGBA PNG с прозрачностью безопаснее сначала протестировать без --normalize-alpha:
pngwolf --in=icon.png --out=icon.pwolf.png --max-stagnate-time=5
А затем отдельно проверить режим прозрачности:
pngwolf --in=icon.png --out=icon.alpha.png --normalize-alpha --max-stagnate-time=5
После этого выбрать меньший корректный результат.
Рекомендованные режимы
| Сценарий | Команда |
|---|---|
| Быстрый тест | pngwolf --in=input.png --out=output.png --max-stagnate-time=3 |
| Обычная оптимизация | pngwolf --in=input.png --out=output.png --max-stagnate-time=5 |
| Более тщательная оптимизация | pngwolf --in=input.png --out=output.png --max-stagnate-time=10 |
| RGBA с прозрачностью | pngwolf --in=input.png --out=output.png --normalize-alpha --max-stagnate-time=5 |
| Только анализ | pngwolf --in=input.png --info |
| Подробная сводка | pngwolf --in=input.png --out=output.png --verbose-summary |
| Максимально тяжёлый режим | pngwolf --in=input.png --out=output.png --max-stagnate-time=10 --7zip-mpass=15 --7zip-mmc=258 --7zip-mfb=258 --zlib-level=9 |
Для большинства файлов достаточно --max-stagnate-time=5. Если файл важный и небольшой, можно поднять до 10. Если файл огромный, лучше начинать с 2–3 секунд и смотреть реальную экономию.
Итоговая оценка
Pngwolf — не массовый оптимизатор PNG для всех, а узкий консольный инструмент для тех, кому нужен более глубокий контроль над PNG compression. Его основная ценность — genetic algorithm для выбора scanline filters и финальная упаковка через Deflate-энкодер 7-Zip. Он не занимается палитризацией, удалением метаданных, конвертацией форматов и графическим предпросмотром. Зато там, где нужно уменьшить RGB/RGBA PNG без визуальной потери и проверить дополнительный выигрыш после других оптимизаторов, Pngwolf остаётся сильным инструментом.
Лучший сценарий для Pngwolf — финальная оптимизация отдельных PNG-ассетов: иконок, логотипов, UI-графики, спрайтов, прозрачных элементов интерфейса. Его не стоит выбирать как первый и единственный PNG optimizer для новичка. Но в руках пользователя, который понимает командную строку и умеет проверять результат, Pngwolf способен добирать те проценты сжатия, которые обычные эвристики пропускают.