Pngwolf: инструмент для продвинутой оптимизации PNG-изображений
Pngwolf — специализированная программа для сжатия PNG-изображений без визуального изменения картинки. Это не графический редактор, не конвертер форматов и не универсальный пакетный сжиматель картинок, а узкий PNG optimizer, который работает с внутренней структурой PNG-файла: анализирует строки изображения, подбирает более выгодные PNG scanline filters и затем пересобирает IDAT-данные через Deflate-сжатие.
Содержание
- 1 Скачать Pngwolf
- 2 Общая информация о программе
- 3 Для чего нужен Pngwolf
- 4 Как устроен интерфейс Pngwolf
- 5 Как работает оптимизация PNG в Pngwolf
- 6 Что Pngwolf делает хорошо
- 7 Подробный разбор параметров
- 7.1 --in=
- 7.2 --out=
- 7.3 --max-stagnate-time=
- 7.4 --max-time=
- 7.5 --verbose-summary
- 7.6 --verbose-analysis
- 7.7 --verbose-genomes
- 7.8 --verbose
- 7.9 --info
- 7.10 --normalize-alpha
- 7.11 --even-if-bigger
- 7.12 --population-size=
- 7.13 --exclude-singles
- 7.14 --exclude-original
- 7.15 --exclude-heuristic
- 7.16 --exclude-experiments
- 7.17 --bigger-is-better
- 7.18 Параметры zlib
- 7.19 Параметры 7-Zip Deflate
- 8 Пошаговая работа с Pngwolf
- 9 Практические сценарии использования
- 10 История версий и развития Pngwolf
- 11 Форматы и ограничения
- 12 Производительность и качество сжатия
- 13 Сравнение с аналогами
- 14 Плюсы и минусы Pngwolf
- 15 Ошибки, неудачные случаи и диагностика
- 16 Рекомендации по настройкам
- 17 Когда Pngwolf стоит использовать
- 18 Когда лучше выбрать другой инструмент
- 19 Частые вопросы
- 19.1 Pngwolf сжимает PNG без потери качества?
- 19.2 У Pngwolf есть графический интерфейс?
- 19.3 Какие кнопки есть в Pngwolf?
- 19.4 Можно ли обработать папку изображений?
- 19.5 Можно ли перезаписывать исходный PNG?
- 19.6 Поддерживает ли Pngwolf прозрачность?
- 19.7 Почему Pngwolf работает медленно?
- 19.8 Почему после Pngwolf файл не уменьшился?
- 19.9 Подходит ли Pngwolf для фотографий?
- 19.10 Можно ли использовать Pngwolf в CI/CD?
- 20 Итог
Скачать Pngwolf
Новейшая версия для Windows и macOS. Удобный редактор с ИИ и профессиональными функциями.
Главная особенность Pngwolf — генетический алгоритм. В обычном PNG каждая строка изображения может быть обработана одним из фильтров: None, Sub, Up, Avg или Paeth. От выбора этих фильтров зависит, насколько хорошо затем сожмутся данные. Полный перебор комбинаций практически невозможен даже для не очень больших изображений, поэтому Pngwolf не перебирает все варианты подряд, а постепенно улучшает набор фильтров: берёт исходные и эвристические последовательности, добавляет случайные комбинации, оценивает результат, скрещивает удачные варианты и оставляет лучшие.

Программа работает через командную строку. У Pngwolf нет окна с кнопками Open, Save, Start, Add Files, нет предпросмотра до/после и нет drag-and-drop области. Интерфейс программы — это параметры запуска: --in, --out, --max-stagnate-time, --max-time, --max-evaluations, --normalize-alpha, --verbose, --info, --7zip-mpass, --7zip-mfb, --7zip-mmc, --zlib-level и другие ключи. Поэтому обзор Pngwolf нужно воспринимать как обзор CLI-инструмента: вместо кнопок здесь важны команды, ограничения, диагностический вывод и поведение программы при обработке PNG.
Pngwolf особенно полезен тогда, когда нужно уменьшить размер PNG без потери качества, но обычные оптимизаторы уже дали основной результат. Он не пытается изменить изображение ради максимальной экономии. Он не переводит PNG-24 в PNG-8, не уменьшает палитру, не конвертирует в WebP или AVIF, не вырезает метаданные как отдельную основную задачу. Его сильная сторона — более точная работа с filter combinations и Deflate-потоком.
В практическом смысле Pngwolf занимает нишу финального инструмента. Сначала изображение можно подготовить другими программами: удалить лишние chunks, привести палитру в порядок, убрать ненужные профили, проверить корректность файла. После этого Pngwolf может попытаться выжать ещё несколько процентов за счёт другой последовательности фильтров строк. Для одиночного файла это иногда кажется мелочью, но для сайта, интерфейса, игры, набора иконок или библиотеки UI-ассетов такая экономия складывается в заметное уменьшение веса статики.
Общая информация о программе
Pngwolf — open-source утилита для минимизации размера PNG image files. Она работает с уже существующим PNG-файлом: читает структуру файла, распаковывает IDAT-данные, анализирует текущие фильтры строк, строит новые последовательности фильтров, оценивает их через zlib и сохраняет результат с использованием Deflate-энкодера 7-Zip. Подход программы строится на том, что размер PNG зависит не только от количества цветов и способа хранения данных, но и от того, насколько удачно данные подготовлены перед Deflate-сжатием.
Pngwolf лучше всего раскрывается на RGB и RGBA PNG. Это логично: именно в таких файлах выбор фильтра строки часто заметно влияет на итоговый размер IDAT. Для палитровых изображений, маленьких иконок с уже идеальной структурой или файлов, где основной вес занимают метаданные, выигрыш может быть минимальным.
Программа не поддерживает interlaced PNG. Если файл сохранён с чересстрочной развёрткой, Pngwolf не является подходящим инструментом для его прямой оптимизации. Такой PNG сначала нужно пересохранить как non-interlaced, а уже затем проверять его через Pngwolf.
Ключевая идея программы состоит не в том, чтобы ухудшить качество ради размера, а в том, чтобы изменить внутреннее представление строк. Пиксели остаются теми же, изображение визуально не меняется, но последовательность байтов перед сжатием становится более удобной для Deflate. Это и есть основа lossless PNG compression в Pngwolf.
Краткая характеристика
| Параметр | Описание |
|---|---|
| Назначение | Уменьшение размера PNG-файлов |
| Тип программы | Консольная CLI-утилита |
| Основной метод | Генетический подбор scanline filters |
| Финальное сжатие | Deflate через 7-Zip |
| Быстрая оценка вариантов | zlib |
| Основной входной формат | PNG |
| Лучшие сценарии | RGB/RGBA PNG, UI-графика, иконки, логотипы, спрайты |
| Не является | Фоторедактором, конвертером, GUI-компрессором, пакетным менеджером изображений |
| Особое ограничение | Не поддерживает interlaced PNG |
Для чего нужен Pngwolf
Pngwolf нужен для точечной оптимизации PNG-файлов, когда важно уменьшить размер без изменения видимого результата. Его используют не для ретуши, не для рисования, не для изменения разрешения, а для более тонкой компрессии уже готового изображения.
Типичные задачи:
уменьшить размер PNG-иконки с прозрачностью;
дополнительно сжать логотип после обычной оптимизации;
подготовить UI-ассеты для сайта или приложения;
уменьшить вес PNG-спрайта;
проверить, можно ли ещё сократить IDAT-данные;
сравнить эффективность scanline filters;
встроить PNG-сжатие в сборочный процесс;
получить YAML-подобный подробный вывод для анализа;
сохранить исходные и лучшие IDAT-данные отдельно для исследования.
Pngwolf не нужно выбирать, если задача состоит в обычном быстро сжать папку картинок одним нажатием. Для этого удобнее программы с графическим интерфейсом или современные быстрые CLI-инструменты. Но если задача звучит иначе — проверить, нельзя ли выжать PNG ещё сильнее без визуальной потери — Pngwolf подходит точнее.
Как устроен интерфейс Pngwolf
Интерфейс Pngwolf — это командная строка. Пользователь не открывает изображение через кнопку Open, не выбирает папку через диалоговое окно и не нажимает Optimize. Вместо этого он запускает программу с параметрами.
Базовая команда выглядит так:
pngwolf --in=input.png --out=output.pngЗдесь:
pngwolf— исполняемый файл программы;--in=input.png— входное PNG-изображение;--out=output.png— путь для сохранения оптимизированного PNG.
Если --out не указан, Pngwolf может выполнить анализ и оптимизацию, но итоговый PNG не будет сохранён. Это важная особенность: для реальной обработки всегда нужно явно задавать выходной файл.
Справка программы описывает базовую форму запуска как pngwolf --in=file.png --out=file.png, а также показывает параметры для сохранения IDAT, исключения отдельных типов фильтровых последовательностей, ограничения времени, настройки zlib и 7-Zip Deflate.
Основные элементы CLI-интерфейса
| Группа | Параметры | Задача |
|---|---|---|
| Вход и выход | --in=, --out= | Указать исходный и итоговый PNG |
| Ограничение времени | --max-time=, --max-stagnate-time= | Управлять длительностью поиска |
| Ограничение поиска | --max-evaluations=, --max-deflate= | Остановить работу после заданного объёма вычислений |
| Диагностика | --verbose, --verbose-analysis, --verbose-summary, --verbose-genomes, --info | Получить подробный вывод |
| Альфа-канал | --normalize-alpha | Нормализовать полностью прозрачные пиксели |
| Поведение при худшем результате | --even-if-bigger | Сохранить результат даже если он больше |
| zlib | --zlib-level=, --zlib-strategy=, --zlib-window=, --zlib-memlevel= | Настроить быстрый оценщик |
| 7-Zip Deflate | --7zip-mfb=, --7zip-mpass=, --7zip-mmc= | Настроить финальное сжатие |
| Исследовательские режимы | --exclude-singles, --exclude-original, --exclude-heuristic, --exclude-experiments, --bigger-is-better | Анализировать поведение алгоритма |
Для обычного пользователя важнее всего пять параметров: --in, --out, --max-stagnate-time, --verbose-summary и --normalize-alpha. Остальные настройки нужны для тонкой настройки или исследования.
Как работает оптимизация PNG в Pngwolf
PNG использует фильтры строк перед Deflate-сжатием. Фильтр не портит изображение и не меняет его визуально. Он меняет способ записи байтов так, чтобы данные лучше сжимались. Например, если строка содержит плавный градиент, значения соседних пикселей могут отличаться на единицу. Вместо последовательности вроде 1, 2, 3, 4 выгоднее хранить первое значение и повторяющуюся разницу. Для Deflate такие повторяемые структуры обычно удобнее.
В PNG есть пять стандартных фильтров строк:
| Код | Фильтр | Смысл |
|---|---|---|
| 0 | None | Строка записывается без фильтрации |
| 1 | Sub | Значения связываются с пикселями слева |
| 2 | Up | Значения связываются с пикселями из предыдущей строки |
| 3 | Avg | Используется среднее между левым и верхним соседями |
| 4 | Paeth | Используется предиктор Paeth |
Обычные PNG-энкодеры выбирают фильтры по эвристикам. Это быстро и подходит для сохранения изображения из редактора, браузера или библиотеки. Но эвристика не всегда даёт лучший результат. На одной части изображения может быть выгоден Sub, на другой — Up, на третьей — None, а для отдельных строк — Paeth. Чем выше изображение, тем больше вариантов.
Если у файла 1000 строк, и для каждой строки есть 5 вариантов фильтра, полный перебор невозможен в реальной работе. Pngwolf решает задачу иначе. Он рассматривает последовательность фильтров как геном, оценивает разные геномы и постепенно улучшает их. Хорошие последовательности дают более компактный deflated IDAT, плохие отбрасываются.
Этапы обработки
Работу Pngwolf можно разложить на несколько шагов:
Программа читает PNG-файл через
--in.Проверяет PNG-сигнатуру и структуру chunks.
Извлекает IHDR и IDAT.
Распаковывает deflated image data.
Восстанавливает исходные scanline filters.
Строит начальные варианты фильтров:
исходные фильтры;
одиночные варианты вроде все строки
None;стандартные эвристики;
экспериментальные эвристики;
случайные варианты.
Оценивает варианты через zlib.
Запускает генетический алгоритм.
При улучшении сохраняет лучшую найденную последовательность.
Финально упаковывает данные через 7-Zip Deflate.
Сравнивает результат с исходным.
Сохраняет итоговый PNG через
--out.
Именно поэтому Pngwolf работает медленнее многих оптимизаторов. Он не просто прогоняет файл через один фиксированный режим сжатия, а ищет более удачную структуру данных.
Что Pngwolf делает хорошо
Pngwolf хорошо показывает себя там, где размер PNG зависит не только от силы Deflate, но и от фильтров строк. Это часто встречается в UI-графике: кнопках, иконках, масках, логотипах, скриншотоподобных изображениях, графике с прозрачностью и областями одинакового цвета.
Сжатие RGB и RGBA PNG
RGB и RGBA PNG — главный практический сценарий. В таких файлах каждая строка содержит достаточно данных, чтобы выбор фильтра действительно влиял на компрессию. Если PNG сохранён обычным редактором, его фильтры могут быть достаточно хорошими, но не лучшими. Pngwolf проверяет альтернативы.
Для RGBA важен ещё один момент: прозрачные области. Полностью прозрачный пиксель визуально не виден, но его RGB-значения всё равно могут храниться в файле. Иногда редакторы оставляют в прозрачных пикселях белый, чёрный, остатки старого изображения или случайные значения. Для Deflate это лишний шум. Pngwolf умеет приводить полностью прозрачные пиксели к прозрачному чёрному через --normalize-alpha.
Опция --normalize-alpha не включена по умолчанию, потому что это уже не строго lossless-преобразование на уровне всех байтов: видимое изображение остаётся тем же, но скрытые RGB-значения прозрачных пикселей меняются. На веб-иконках это часто приемлемо, но в игровых текстурах, атласах и mipmap-сценариях нужно проверять результат.
Дополнительная оптимизация после других инструментов
Pngwolf не заменяет весь набор PNG tools. Он часто полезен после них. Например, рабочая цепочка может выглядеть так:
optipng -o7 icon.pngpngwolf --in=icon.png --out=icon.pwolf.png --max-stagnate-time=5Или так:
oxipng -o 4 --strip safe logo.pngpngwolf --in=logo.png --out=logo.final.png --max-stagnate-time=10Смысл такой цепочки простой: первый инструмент делает базовую оптимизацию, а Pngwolf пытается найти лучший набор scanline filters. Для лучших результатов разные PNG-инструменты приходится использовать в комбинации, а Pngwolf обычно логично запускать последним или предпоследним.
Контролируемая остановка поиска
Pngwolf рассчитан на ситуации, когда пользователь не хочет ждать бесконечно. Для этого есть несколько ограничителей:
pngwolf --in=input.png --out=output.png --max-stagnate-time=5--max-stagnate-time=5 означает: остановиться, если в течение 5 секунд не найдено улучшение. Это практичнее, чем просто дать программе фиксированную минуту на каждый файл. Если улучшения давно не появляются, дальнейший поиск часто не имеет смысла.
Есть и другие варианты:
pngwolf --in=input.png --out=output.png --max-time=30--max-time=30 задаёт общий лимит времени в секундах.
pngwolf --in=input.png --out=output.png --max-evaluations=1000--max-evaluations=1000 ограничивает число оценённых геномов.
pngwolf --in=input.png --out=output.png --max-deflate=50--max-deflate=50 ограничивает объём работы по deflate-оценке.
Сохранение результата при прерывании
Pngwolf учитывает реальную проблему CLI-оптимизаторов: пользователь может запустить обработку, увидеть, что она идёт слишком долго, и прервать её. В такой ситуации найденный результат не должен теряться. Программа обрабатывает прерывание и сохраняет лучший найденный вариант, если он уже есть.
Это делает Pngwolf удобнее для экспериментальной работы. Можно запустить оптимизацию, посмотреть прогресс, а затем остановить процесс, не обязательно теряя уже найденное улучшение.
Подробный разбор параметров
--in=
Параметр --in= задаёт входной PNG-файл. Это обязательный параметр.
Пример:
pngwolf --in=source.png --out=source.optimized.pngЕсли --in не указан, Pngwolf выводит справку и не выполняет оптимизацию. Программа не принимает изображение через графическое окно и не просит выбрать файл интерактивно. Всё задаётся при запуске.
--out=
Параметр --out= задаёт путь сохранения результата.
Пример:
pngwolf --in=source.png --out=result.pngБез --out итоговый файл не сохраняется. Это важно для автоматизации: нельзя рассчитывать, что Pngwolf сам перезапишет оригинал или создаст файл рядом с исходником. Нужно явно указать путь.
Безопасная практика — не перезаписывать исходный файл сразу:
pngwolf --in=logo.png --out=logo.optimized.pngПосле этого можно сравнить размеры и проверить изображение.
--max-stagnate-time=
Это один из самых полезных параметров программы. Он останавливает поиск, если Pngwolf не находит улучшений заданное число секунд.
Пример:
pngwolf --in=button.png --out=button.min.png --max-stagnate-time=5Для большинства рабочих сценариев разумны значения от 3 до 10 секунд. Маленькое значение ускоряет обработку большого набора файлов. Большое значение повышает шанс найти дополнительный выигрыш, но увеличивает время.
Практическая логика:
| Значение | Когда использовать |
|---|---|
2 | Быстрый прогон большого набора PNG |
5 | Обычная финальная оптимизация |
10 | Важные иконки, логотипы, UI-ассеты |
30 и выше | Исследование, сравнение, точечная оптимизация |
--max-time=
--max-time= задаёт общий лимит времени работы.
Пример:
pngwolf --in=sprite.png --out=sprite.optimized.png --max-time=60Этот параметр проще, но грубее, чем --max-stagnate-time. Он не учитывает, были ли недавно улучшения. Если файл быстро перестал улучшаться, Pngwolf всё равно будет работать до лимита. Если улучшения продолжают появляться, программа всё равно остановится по таймеру.
Для автоматической обработки папок лучше чаще использовать --max-stagnate-time, а --max-time добавлять как страховку:
pngwolf --in=asset.png --out=asset.optimized.png --max-stagnate-time=5 --max-time=30--verbose-summary
--verbose-summary показывает более подробную сводку после оптимизации. Этот режим полезен, когда нужно не только получить файл, но и понять, что произошло.
Пример:
pngwolf --in=logo.png --out=logo.optimized.png --max-stagnate-time=10 --verbose-summaryСводка помогает оценить:
насколько уменьшился IDAT;
сколько времени ушло на поиск;
сколько геномов было оценено;
какой размер дал финальный Deflate;
был ли найден результат лучше исходного.
--verbose-analysis
--verbose-analysis раскрывает подробности начального анализа PNG.
Пример:
pngwolf --in=icon.png --out=icon.optimized.png --verbose-analysisЭтот режим показывает параметры изображения: ширину, высоту, color mode, bit depth, interlace, scanline width, размер inflated и deflated IDAT, chunks, а для RGBA может показать информацию о полностью прозрачных пикселях. В исходном коде Pngwolf именно этот режим выводит расширенный YAML-подобный анализ изображения.
--verbose-genomes
--verbose-genomes показывает подробности при найденных улучшениях. Это уже не обычный пользовательский режим, а инструмент для анализа поведения генетического алгоритма.
Пример:
pngwolf --in=source.png --out=source.out.png --verbose-genomesОн полезен, если нужно увидеть, как меняется лучшая последовательность фильтров и как программа продвигается в поиске. В обычной пакетной обработке такой вывод может быть слишком подробным.
--verbose
--verbose включает все verbose-режимы сразу:
pngwolf --in=source.png --out=source.out.png --verboseЭтот вариант удобен для одного тестового файла. Для обработки сотен PNG лучше не включать полный verbose без необходимости, потому что лог станет слишком большим.
--info
--info выводит подробный анализ и завершает работу без полноценной оптимизации.
Пример:
pngwolf --in=asset.png --infoЭто хороший режим для предварительной диагностики. Через --info можно понять, какой перед вами PNG: RGB, RGBA, interlaced или нет, какие chunks есть в файле, насколько велик IDAT, есть ли особенность с прозрачными пикселями.
--normalize-alpha
--normalize-alpha меняет полностью прозрачные пиксели так, чтобы их RGB-значение стало прозрачным чёрным.
Пример:
pngwolf --in=icon.png --out=icon.alpha.png --normalize-alpha --max-stagnate-time=5На веб-графике этот режим часто полезен. Иконка визуально остаётся такой же, но данные в прозрачных областях становятся более однообразными и лучше сжимаются. На технических изображениях, игровых текстурах и атласах нужно быть осторожнее: иногда скрытый RGB прозрачных пикселей используется для корректных краёв при масштабировании, фильтрации или генерации mipmap.
На примере с нормализацией прозрачности image data уменьшается с 1748 до 1240 байт, то есть даёт заметную экономию именно за счёт приведения полностью прозрачных пикселей к единому виду.

--even-if-bigger
По умолчанию Pngwolf не должен ухудшать размер результата. Если найденный вариант больше исходного, программа сохраняет исходный вариант. --even-if-bigger меняет это поведение и разрешает сохранить результат даже если он больше.
Пример:
pngwolf --in=source.png --out=test-bigger.png --even-if-biggerДля обычной оптимизации этот параметр не нужен. Он полезен для тестов, сравнения алгоритмов и анализа поведения фильтров.
--population-size=
--population-size= задаёт размер популяции генетического алгоритма.
Пример:
pngwolf --in=source.png --out=source.out.png --population-size=31Большая популяция может расширить поиск, но увеличивает вычислительную нагрузку. В обычной работе этот параметр лучше не трогать без тестов. Он важнее для исследования PNG-фильтров, чем для повседневного уменьшения веса изображений.
--exclude-singles
Исключает single-filter genomes — варианты, где один фильтр применяется ко всем строкам.
Пример:
pngwolf --in=source.png --out=source.out.png --exclude-singlesДля обычной оптимизации параметр редко нужен. Иногда именно простая стратегия вроде все строки None может оказаться сильной. Исключать такие варианты имеет смысл только при исследовании.
--exclude-original
Исключает последовательность фильтров исходного изображения.
pngwolf --in=source.png --out=source.out.png --exclude-originalОбычно исходную последовательность лучше оставлять в наборе кандидатов. Она служит естественной точкой сравнения. Исключение может быть полезно только при экспериментах.
--exclude-heuristic
Исключает эвристически сгенерированные фильтры.
pngwolf --in=source.png --out=source.out.png --exclude-heuristicДля реальной оптимизации это не лучший выбор: эвристики часто дают хороший старт. Параметр нужен для проверки того, насколько генетический алгоритм способен находить решения без стандартных начальных вариантов.
--exclude-experiments
Исключает экспериментальные эвристики.
pngwolf --in=source.png --out=source.out.png --exclude-experimentsЭтот ключ тоже относится к исследовательским режимам. В обычном сценарии лучше не обрезать набор кандидатов без причины.
--bigger-is-better
--bigger-is-better переворачивает цель поиска: программа начинает искать последовательности фильтров, которые сжимаются хуже.
pngwolf --in=source.png --out=worse.png --bigger-is-betterЭто не режим оптимизации. Он нужен для исследования, демонстрации влияния фильтров и тестирования алгоритма. Для уменьшения размера PNG его использовать нельзя.
Параметры zlib
Pngwolf использует zlib как быстрый оценщик. Это не всегда финальное сжатие, а способ быстро сравнивать множество вариантов фильтров.
| Параметр | Значение |
|---|---|
--zlib-level= | Уровень zlib-сжатия |
--zlib-strategy= | Стратегия zlib |
--zlib-window= | Размер окна |
--zlib-memlevel= | Уровень памяти |
Пример:
pngwolf --in=source.png --out=source.out.png --zlib-level=9Более высокий уровень может улучшить оценку, но увеличит стоимость каждого сравнения. В большинстве случаев не стоит менять zlib-настройки до тех пор, пока не понятно, что именно нужно проверить.
Параметры 7-Zip Deflate
Финальное сжатие Pngwolf выполняет через Deflate-энкодер 7-Zip. Для него доступны параметры:
| Параметр | Назначение |
|---|---|
--7zip-mfb= | Fast bytes, диапазон 3–258 |
--7zip-mpass= | Количество проходов |
--7zip-mmc= | Match finder cycles |
Пример усиленного режима:
pngwolf --in=source.png --out=source.out.png --max-stagnate-time=10 --7zip-mpass=15 --7zip-mfb=258 --7zip-mmc=258Такой запуск может дать более плотный результат, но будет медленнее. Его лучше использовать для небольшого набора важных файлов, а не для каждой картинки в рабочей папке.
Пошаговая работа с Pngwolf
Проверка файла перед оптимизацией
Перед обработкой полезно понять, подходит ли PNG для Pngwolf. Для этого используется --info:
pngwolf --in=logo.png --infoЕсли файл нормальный, не interlaced и содержит подходящие IDAT-данные, можно запускать оптимизацию. Если Pngwolf сообщает, что interlaced images не поддерживаются, файл нужно сначала пересохранить как обычный non-interlaced PNG.
Оптимизация одного PNG-файла
Базовая команда:
pngwolf --in=logo.png --out=logo.optimized.pngЛучше сразу ограничить время без улучшений:
pngwolf --in=logo.png --out=logo.optimized.png --max-stagnate-time=5Для более подробного результата:
pngwolf --in=logo.png --out=logo.optimized.png --max-stagnate-time=5 --verbose-summaryПосле обработки нужно сравнить размер исходного и выходного файла. Важно проверять не только общий размер PNG, но и корректность изображения в браузере, редакторе или целевом приложении.
Оптимизация PNG с прозрачностью
Для иконок, кнопок и UI-элементов с прозрачными областями можно проверить --normalize-alpha:
pngwolf --in=icon.png --out=icon.optimized.png --normalize-alpha --max-stagnate-time=5Если это веб-иконка, логотип или декоративный прозрачный PNG, режим часто безопасен. Если это игровая текстура, атлас интерфейса, материал для 3D или изображение, где прозрачные пиксели используются нестандартно, лучше дополнительно проверить края.
Оптимизация с ограничением общего времени
Если нужно гарантировать, что обработка не займёт больше заданного времени:
pngwolf --in=sprite.png --out=sprite.optimized.png --max-time=30Практичнее комбинировать два лимита:
pngwolf --in=sprite.png --out=sprite.optimized.png --max-stagnate-time=5 --max-time=30Такой запуск останавливается либо при отсутствии улучшений, либо по общему таймеру.
Обработка папки PNG
Pngwolf сам по себе обрабатывает один файл за запуск. Пакетная обработка делается через оболочку.
Пример для Linux/macOS:
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 может работать долго, поэтому при пакетной обработке важно не запускать слишком много процессов одновременно. На Linux/macOS можно ограничить параллельность:
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 сразу на всех файлах в каталоге.
Сохранение IDAT для анализа
Для исследовательских задач можно сохранить исходные и лучшие 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-данные.
Практические сценарии использования
Иконки сайта
PNG-иконки часто имеют прозрачность, плоские заливки, повторяющиеся области и резкие границы. Это хороший материал для lossless optimization. Рабочая команда:
pngwolf --in=icon-search.png --out=icon-search.min.png --normalize-alpha --max-stagnate-time=5Для набора иконок лучше сначала создать отдельную папку результата, чтобы не перезаписать исходники. После обработки стоит проверить, что визуально иконки выглядят так же, а прозрачные края не дают артефактов в интерфейсе.
Логотипы
Логотип в PNG часто используется на многих страницах сайта. Даже небольшое уменьшение размера здесь оправдано. Команда:
pngwolf --in=logo.png --out=logo.optimized.png --max-stagnate-time=10 --verbose-summaryЕсли у логотипа есть прозрачный фон:
pngwolf --in=logo.png --out=logo.optimized.png --normalize-alpha --max-stagnate-time=10 --verbose-summaryПосле обработки логотип нужно проверить на светлом и тёмном фоне. Видимое изображение не должно измениться.
UI-спрайты
Спрайт или атлас интерфейса может быть крупным. Здесь экономия может быть заметнее, но и время обработки выше.
pngwolf --in=ui-atlas.png --out=ui-atlas.optimized.png --max-stagnate-time=5 --max-time=60Для спрайтов не стоит автоматически включать --normalize-alpha, если ассет используется в движке с фильтрацией текстур. Сначала нужно проверить, как движок работает с прозрачными пикселями.
PNG-графика для документации
Скриншоты интерфейсов, схемы, диаграммы и изображения с текстом часто хорошо подходят для PNG. Они содержат много повторяемых областей и резких переходов.
pngwolf --in=manual-screen.png --out=manual-screen.optimized.png --max-stagnate-time=5Для таких изображений Pngwolf может дать дополнительный выигрыш после обычной оптимизации, особенно если исходный PNG был сохранён редактором без сильного подбора фильтров.
Финальная оптимизация ассетов перед релизом
Для релизной сборки можно использовать более осторожную цепочку:
mkdir -p build/pngfor file in assets/*.png; do name=$(basename "$file") pngwolf --in="$file" --out="build/png/$name" --max-stagnate-time=10 --verbose-summarydoneЕсли проект большой, лучше не запускать тяжёлую оптимизацию на каждом коммите. Рациональная схема:
| Этап | Режим |
|---|---|
| Локальная разработка | Без Pngwolf или --max-stagnate-time=2 |
| Предрелизная сборка | --max-stagnate-time=5 |
| Финальная сборка | --max-stagnate-time=10 |
| Исследование отдельных файлов | Усиленные zlib/7-Zip настройки |
История версий и развития Pngwolf
Pngwolf развивался как исследовательский и практический инструмент для PNG compression. В его истории важны не косметические версии интерфейса, а развитие подхода к фильтрам строк, анализу прозрачности и настройкам поиска.
| Период | Изменения и значение |
|---|---|
| Начальный этап | Сформирована основная идея: оптимизировать PNG не за счёт изменения картинки, а за счёт генетического подбора scanline filters |
| Развитие CLI-параметров | Появились настройки входа, выхода, времени поиска, числа оценок, zlib-оценщика и 7-Zip Deflate |
| Улучшение анализа | Добавлен подробный вывод для анализа изображения, фильтров и IDAT-данных |
| Расширение исследовательских режимов | Добавлены ключи для исключения исходных, одиночных, эвристических и экспериментальных вариантов |
| Работа с прозрачностью | Добавлен режим --normalize-alpha, который нормализует полностью прозрачные пиксели |
| Уточнение эвристик | Описаны и проверены разные подходы к выбору фильтров: стандартная эвристика, deflate scanline, distinct bytes, distinct bigrams, incremental |
| Стабилизация сценариев применения | Pngwolf закрепился как инструмент, который разумнее использовать в цепочке PNG-оптимизации, чаще ближе к финальному этапу |
В истории Pngwolf особенно важен блок изменений за март 2011 года: были добавлены заметки о нормализации прозрачности, настройках, эвристиках фильтрации и обновлены результаты сравнительной таблицы.
Это хорошо показывает характер программы. Pngwolf не развивался как массовый коммерческий продукт с новыми окнами и кнопками. Его развитие связано с уточнением алгоритма, диагностикой и объяснением того, почему разные последовательности фильтров дают разный размер PNG.
Форматы и ограничения
Pngwolf работает именно с PNG. Он не принимает JPEG, GIF, TIFF, BMP, WebP, AVIF или HEIC как форматы для оптимизации. Если файл не PNG, его нужно обрабатывать другими инструментами.
Лучше всего подходят:
RGB PNG;
RGBA PNG;
non-interlaced PNG;
иконки;
логотипы;
UI-графика;
PNG-спрайты;
изображения с прозрачностью;
скриншотоподобная графика;
файлы, где IDAT занимает значительную часть размера.
Плохо подходят:
interlaced PNG;
очень маленькие PNG, где выигрыш будет в несколько байт;
файлы, где основной вес занимают метаданные;
изображения, которые нужно сначала перевести в палитру;
PNG, уже максимально сжатые несколькими сильными инструментами;
задачи, где нужна конвертация в WebP, AVIF или JPEG XL;
сценарии, где требуется графический предпросмотр.
Pngwolf не делает палитризацию. Если PNG содержит мало цветов, но сохранён как RGB/RGBA, иногда больший выигрыш даст перевод в indexed PNG через другой инструмент. После этого Pngwolf может быть уже не главным способом уменьшения размера.
Производительность и качество сжатия
Pngwolf ориентирован на размер, а не на скорость. Это принципиальная особенность. Быстрый PNG-оптимизатор может просто перепаковать данные и закончить работу за доли секунды. Pngwolf тратит время на поиск: он оценивает много фильтровых последовательностей, проверяет улучшения и только потом пишет финальный результат.

Скорость зависит от нескольких факторов:
размера изображения;
высоты PNG, потому что каждая строка участвует в выборе фильтра;
типа данных: RGB, RGBA, палитровый PNG;
количества повторяемых областей;
настроек
--max-stagnate-timeи--max-time;параметров zlib;
параметров 7-Zip Deflate;
включения verbose-режимов;
количества параллельных процессов при пакетной обработке.
В сравнительных тестах lossless PNG-инструментов Pngwolf не всегда лидер по скорости, но регулярно оказывается среди инструментов, которые могут дать дополнительную экономию на отдельных наборах изображений. Более быстрые инструменты вроде pingo, oxipng или ect часто практичнее для массового прохода, а Pngwolf интересен именно как дополнительный глубокий проход для отдельных PNG.
Важно понимать: Pngwolf не гарантирует крупную экономию на каждом файле. Иногда результат будет таким же, иногда на несколько байт меньше, иногда программа просто оставит исходный вариант, потому что найденный новый поток оказался больше. Это нормальное поведение для lossless-оптимизатора.
Сравнение с аналогами
Pngwolf нужно сравнивать не с фоторедакторами, а с конкретными PNG-инструментами. Его ближайшая среда — OptiPNG, pngcrush, oxipng, AdvanceCOMP/advpng, pngout и zopflipng. У всех этих программ разные сильные стороны.
| Инструмент | Основная роль | Сильные стороны | Ограничения |
|---|---|---|---|
| OptiPNG | Recompression PNG без потерь | Удобный универсальный CLI-инструмент, проверка и оптимизация PNG | Не фокусируется на генетическом подборе фильтров |
| pngcrush | Подбор PNG-фильтров и zlib-стратегий | Гибкая работа с PNG chunks и стратегиями | Может быть сложнее и медленнее простых оптимизаторов |
| oxipng | Современный быстрый lossless PNG/APNG optimizer | Скорость, многопоточность, strip metadata, практичность в пайплайнах | Не является исследовательским инструментом для эволюционного поиска фильтров |
| AdvanceCOMP / advpng | Recompression через сильный Deflate | Простая финальная перепаковка, полезна не только для PNG | Не решает задачу генетического выбора scanline filters |
| pngout | Сильный PNG/Deflate-компрессор | Часто даёт плотные PNG, прост как самостоятельный оптимизатор | Закрытая экосистема и меньше прозрачности для исследовательских сценариев |
| zopflipng | Медленное, но мощное Deflate/Zopfli-сжатие | Хорошее lossless-сжатие, понятная логика применения | Может быть очень медленным на больших файлах |
OptiPNG
OptiPNG практичнее как первый инструмент для обычной оптимизации. Он подходит для быстрой обработки PNG, исправления некоторых структурных особенностей и recompression без потери данных. Его проще встроить в массовый процесс.
Pngwolf сильнее в другой задаче: он не просто пробует уровни сжатия, а ищет последовательность фильтров строк. Поэтому после OptiPNG иногда есть смысл запустить Pngwolf и проверить, осталось ли пространство для улучшения.
pngcrush
pngcrush ближе по духу, потому что тоже работает с PNG-фильтрами и параметрами сжатия. Но подход отличается. pngcrush перебирает стратегии и настройки, а Pngwolf применяет генетический алгоритм к последовательности фильтров строк.
Если нужно управлять chunks и более широко экспериментировать с PNG-структурой, pngcrush может быть удобнее. Если интересует именно поиск более удачной filter sequence, Pngwolf точнее попадает в задачу.
oxipng
oxipng — более современный и удобный инструмент для массовой lossless-оптимизации. Он быстрее, лучше подходит для регулярной сборки проекта, умеет работать с PNG/APNG, поддерживает полезные параметры удаления метаданных и оптимизации.
Pngwolf не конкурирует с oxipng по повседневному удобству. Его логичнее использовать после oxipng на отдельных файлах, где важен каждый байт и можно позволить себе более долгий поиск.
AdvanceCOMP / advpng
advpng интересен тем, что использует сильное Deflate-сжатие для перепаковки данных. Это хороший инструмент для финального recompression. Но он не решает центральную задачу Pngwolf: не ищет эволюционно лучшую последовательность scanline filters.
Комбинация может быть полезной: один инструмент отвечает за перепаковку, другой — за подготовку данных через фильтры.
pngout
pngout часто показывает сильный результат как PNG-компрессор. Он может быть проще в применении, если нужно получить компактный PNG без дополнительных размышлений. Но Pngwolf интересен именно тем, что может найти другие фильтры строк и за счёт этого выиграть на отдельных файлах.
В практической цепочке pngout и Pngwolf не обязательно взаимоисключают друг друга. Их можно сравнивать на конкретных изображениях и оставлять меньший файл.
zopflipng
zopflipng делает ставку на мощное Deflate-сжатие через Zopfli. Он может быть медленным, но часто даёт хороший lossless-результат. Отличие Pngwolf в том, что он больше сосредоточен на выборе фильтров строк, а не только на силе финального Deflate.
Для финального релизного ассета можно проверять оба инструмента. Иногда лучше окажется zopflipng, иногда Pngwolf, иногда разница будет несущественной.
Плюсы и минусы Pngwolf
| Плюсы | Минусы |
|---|---|
| Глубокая работа с PNG scanline filters | Нет графического интерфейса |
| Генетический алгоритм для поиска filter combinations | Может работать медленно |
| Хорошо подходит для RGB/RGBA PNG | Не поддерживает interlaced PNG |
| Может дать дополнительную экономию после других оптимизаторов | Не удаляет метаданные как основную задачу |
| Есть ограничение по времени и отсутствию улучшений | Не конвертирует изображения в другие форматы |
| Есть подробный YAML-подобный вывод | Требует понимания командной строки |
| Можно прервать работу без потери найденного результата | Пакетная обработка только через внешние скрипты |
Есть режим --normalize-alpha для прозрачных пикселей | Нормализация альфы не является строго байтово-lossless преобразованием |
Главный плюс Pngwolf — точность специализации. Главный минус — та же самая специализация. Программа делает не всё, а одну сложную вещь. Поэтому она не подходит как единственный инструмент для всех изображений, но хорошо работает как часть цепочки оптимизации PNG.
Ошибки, неудачные случаи и диагностика
Interlaced images are not supported
Если файл interlaced, Pngwolf завершает работу с ошибкой. Это ограничение программы. Решение — пересохранить PNG как non-interlaced другим инструментом, затем снова запустить Pngwolf.
Some error occurred while reading the input file
Такое сообщение означает проблему чтения. Возможные причины:
файл не является PNG;
файл повреждён;
путь указан неправильно;
нет доступа к файлу;
PNG имеет неподдерживаемую структуру.
Сначала нужно проверить путь и открыть файл обычным просмотрщиком. Затем можно проверить его другими PNG-инструментами.
Some error occurred while writing an output file
Ошибка записи возникает, когда Pngwolf не может сохранить результат. Причины:
нет прав на папку;
указан несуществующий путь;
файл занят другим процессом;
недостаточно места;
выходной путь некорректен.
Безопаснее сохранять результат в отдельную папку, которая уже создана:
mkdir optimizedpngwolf --in=source.png --out=optimized/source.pngРезультат не стал меньше
Это не обязательно ошибка. Возможные причины:
исходный PNG уже хорошо оптимизирован;
файл слишком маленький;
картинка не выигрывает от другого набора фильтров;
основной вес находится не в IDAT;
файл лучше сначала палитризировать;
zlib-оценка не привела к лучшему финальному Deflate;
лимит времени слишком мал.
Для проверки можно включить подробную сводку:
pngwolf --in=source.png --out=source.out.png --max-stagnate-time=10 --verbose-summaryВыходной файл больше исходного
По умолчанию Pngwolf старается не ухудшать результат. Если найденный deflated IDAT хуже исходного, программа использует исходный вариант, если не включён --even-if-bigger. Поэтому в обычной работе не нужно добавлять --even-if-bigger.
Рекомендации по настройкам
Быстрый режим
pngwolf --in=input.png --out=output.png --max-stagnate-time=2Подходит для большого набора PNG, когда нужно быстро проверить потенциальный выигрыш.
Обычный рабочий режим
pngwolf --in=input.png --out=output.png --max-stagnate-time=5 --verbose-summaryХороший баланс между временем и результатом.
Режим для важных файлов
pngwolf --in=input.png --out=output.png --max-stagnate-time=10 --verbose-summaryПодходит для логотипов, иконок, UI-элементов и файлов, которые будут часто загружаться.
Режим для прозрачных иконок
pngwolf --in=icon.png --out=icon.optimized.png --normalize-alpha --max-stagnate-time=5 --verbose-summaryИспользовать после проверки, что скрытые RGB-значения прозрачных пикселей не нужны целевому пайплайну.
Исследовательский режим
pngwolf --in=source.png --out=source.optimized.png --verbose --max-stagnate-time=10Подходит для анализа фильтров, логов и поведения генетического алгоритма.
Когда Pngwolf стоит использовать
Pngwolf стоит использовать, если:
файл уже готов и не нуждается в редактировании;
нужен именно PNG, а не WebP или AVIF;
изображение RGB или RGBA;
файл не interlaced;
важен каждый процент уменьшения размера;
допустима работа через командную строку;
обработка может занять больше времени;
результат будет проверяться перед заменой исходника;
Pngwolf используется как часть цепочки оптимизации.
Особенно уместные случаи:
финальная публикация сайта;
подготовка набора иконок;
оптимизация логотипов;
сборка UI-ассетов;
подготовка игровых ресурсов;
исследование lossless PNG compression;
сравнение разных PNG-оптимизаторов.
Когда лучше выбрать другой инструмент
Pngwolf не стоит выбирать как основной инструмент, если нужно:
быстро обработать тысячи изображений;
получить удобный графический интерфейс;
перетащить файлы мышью;
конвертировать JPEG, TIFF, BMP или WebP;
уменьшить палитру PNG;
удалить метаданные;
изменить разрешение;
обрезать изображение;
сжать фото с потерями;
получить визуальный предпросмотр до/после.
В таких случаях практичнее использовать oxipng, OptiPNG, pngcrush, ImageOptim, FileOptimizer, RIOT или другой инструмент в зависимости от задачи.
Частые вопросы
Pngwolf сжимает PNG без потери качества?
Да, основной сценарий Pngwolf — уменьшение PNG без визуального изменения изображения. Он меняет фильтры строк и Deflate-представление данных. Пиксели остаются теми же. Исключение — режим --normalize-alpha: он не меняет видимую картинку, но изменяет RGB-значения полностью прозрачных пикселей.
У Pngwolf есть графический интерфейс?
Нет. Pngwolf — консольная программа. Все действия выполняются через параметры командной строки.
Какие кнопки есть в Pngwolf?
Кнопок нет. Вместо кнопок используются CLI-параметры: --in, --out, --info, --verbose, --normalize-alpha, --max-stagnate-time и другие.
Можно ли обработать папку изображений?
Да, но не встроенной очередью. Pngwolf обрабатывает один файл за запуск, а папка обрабатывается через shell, batch, PowerShell, Python-скрипт или систему сборки.
Можно ли перезаписывать исходный PNG?
Технически можно указать один и тот же путь, но безопаснее сохранять результат в отдельный файл или отдельную папку. Так проще сравнить размеры и откатиться при ошибке.
Поддерживает ли Pngwolf прозрачность?
Да, Pngwolf работает с RGBA PNG. Кроме того, есть параметр --normalize-alpha, который может уменьшить размер изображений с полностью прозрачными пикселями.
Почему Pngwolf работает медленно?
Потому что программа ищет лучшую последовательность фильтров строк через генетический алгоритм. Она оценивает много вариантов, а не просто применяет один режим сжатия.
Почему после Pngwolf файл не уменьшился?
Файл мог быть уже оптимизирован, мог не подходить под refiltering, мог быть слишком маленьким или содержать вес не в IDAT, а в других chunks. Это нормальная ситуация.
Подходит ли Pngwolf для фотографий?
Если фотография сохранена в PNG, Pngwolf может попробовать её оптимизировать, но PNG обычно не лучший формат для фотографий. Для фото чаще подходят JPEG, WebP или AVIF. Pngwolf полезнее для UI-графики, иконок, прозрачных изображений, логотипов и скриншотоподобных PNG.
Можно ли использовать Pngwolf в CI/CD?
Да, но с ограничениями по времени. Для регулярных сборок лучше задавать --max-stagnate-time=2 или --max-stagnate-time=5, а тяжёлые режимы оставлять для релиза.
Итог
Pngwolf — не массовая программа для сжатия любых картинок, а точный консольный PNG optimizer для пользователей, которым важна глубокая lossless-оптимизация. Его основная ценность — генетический подбор scanline filters и финальная упаковка через Deflate-энкодер 7-Zip. Он не редактирует изображения, не конвертирует форматы, не удаляет метаданные как отдельную основную задачу и не предлагает графический интерфейс.
Сильная сторона Pngwolf — дополнительное уменьшение PNG там, где обычные эвристики могли выбрать не лучший набор фильтров. Программа особенно уместна для RGB/RGBA PNG: иконок, логотипов, UI-графики, спрайтов, прозрачных элементов и ассетов, которые уже прошли базовую оптимизацию.
Выбирать Pngwolf стоит тогда, когда размер важнее скорости, командная строка не является проблемой, а результат проверяется осознанно. Для новичка, которому нужно быстро сжать папку картинок одним нажатием, это не самый удобный вариант. Для пользователя, который понимает PNG compression и хочет добрать последние проценты сжатия, Pngwolf остаётся сильным специализированным инструментом.
