Pngcrush - скачать полную версию бесплатно на русском

Pngcrush: сжатие PNG-файлов

Pngcrush: сжатие PNG-файлов

Pngcrush — это консольная утилита для оптимизации PNG-файлов без потери качества. Её основная задача — уменьшить размер PNG за счёт более удачного сжатия потока IDAT, подбора PNG-фильтров, настройки zlib-сжатия и аккуратной работы со вспомогательными чанками. В практическом смысле Pngcrush нужен тогда, когда PNG-файл уже готов визуально, менять изображение не требуется, но нужно сделать его легче для сайта, приложения, архива, сборки интерфейса или репозитория.

Выбор редакции

Скачать Pngcrush бесплатно

Рекомендуем

ФотоМАСТЕР

  • Простой интерфейс
  • Ретушь и замена фона
  • Фильтры и автокоррекция
  • Быстрая обработка фото

Pngcrush

  • Узкая задача
  • Нет полноценной ретуши
  • Мало художественных инструментов
  • Интерфейс может быть утилитарным

Главная особенность программы в том, что она не является графическим редактором. В ней нет окна с кнопками Открыть, Сохранить, Экспорт, нет панели предпросмотра, ползунка качества и визуального сравнения до и после. Весь интерфейс Pngcrush — это командная строка: пользователь указывает входной файл, выходной файл и набор параметров. Именно поэтому программа особенно хорошо подходит для автоматизации: её удобно запускать из скриптов, сборочных систем, CI-процессов, shell-команд, PowerShell-сценариев и контекстных действий файлового менеджера.

Типовая команда выглядит просто:

pngcrush input.png output.png

После запуска Pngcrush читает исходный PNG, анализирует его структуру, пробует разные варианты повторной упаковки данных и записывает новый файл. Пиксели при этом сохраняются. Это не lossy-компрессор и не инструмент для ухудшения изображения ради минимального размера. Если задача — оставить картинку визуально и математически той же, но уменьшить вес файла, Pngcrush находится в правильной категории.

В обзорах программ Pngcrush часто выглядит менее дружелюбно, чем привычные приложения для сжатия картинок. Это справедливо: новичку проще открыть онлайн-компрессор, перетащить файл мышью и получить результат. Но сила Pngcrush не в красивом интерфейсе, а в контроле. Программа позволяет явно указать, какие чанки удалить, какие оставить, нужно ли пытаться исправить проблемный PNG, надо ли сохранить дату изменения файла, стоит ли включать тяжёлый режим -brute, нужно ли выполнить только проверку без записи результата.

Pngcrush особенно полезен в четырёх сценариях:

  • подготовка PNG-графики для сайта, где важны размер страницы и скорость загрузки;

  • обработка иконок, схем, скриншотов и интерфейсных ассетов перед включением в проект;

  • удаление лишних текстовых и служебных данных из PNG;

  • техническая диагностика PNG-файлов через подробный консольный вывод.

Программа работает именно с PNG. Она не заменяет редакторы изображений, не предназначена для ретуши, не меняет художественное содержимое файла и не решает задачи JPEG, WebP или AVIF. Её область — Portable Network Graphics, lossless compression, PNG optimizer, ancillary chunks, IDAT stream, filter methods и zlib compression level.

Краткая справка о программе

Pngcrush — бесплатная программа с открытым исходным кодом, написанная на C. Её разработчик и основной сопровождающий — Glenn Randers-Pehrson, один из известных участников экосистемы PNG/libpng. Утилита относится к семейству PNG and MNG tools и исторически связана с libpng и zlib: Pngcrush использует эти технологии для чтения, проверки, сжатия и записи PNG-структуры.

Программа кроссплатформенная. Её можно запускать в Windows через Command Prompt или PowerShell, в Linux через обычный терминал, в macOS через Terminal. Для пользователя это означает, что базовая логика работы не меняется: команда остаётся командой, а различия сводятся в основном к путям, кавычкам, маскам файлов и синтаксису оболочки.

Pngcrush относится к утилитам, где интерфейс — это не кнопки, а параметры. Например:

pngcrush -brute -reduce input.png output.png

Здесь -brute включает расширенный перебор методов, а -reduce разрешает программе без потерь уменьшать цветовую глубину или тип представления там, где это допустимо. Другой пример:

pngcrush -rem text input.png output.png

Эта команда удаляет текстовые чанки. Она не перерисовывает изображение и не меняет картинку как редактор, а работает со структурой PNG-файла.

Внутри PNG изображение хранится не просто как набор пикселей. Файл состоит из чанков. Критические чанки нужны для чтения изображения, а вспомогательные могут хранить гамму, цветовой профиль, прозрачность, физическое разрешение, текстовые комментарии, сведения о программе-источнике, дату создания и другие данные. Pngcrush умеет работать с такими элементами точечно: удалять, добавлять, сохранять или менять отдельные типы данных.

Важная деталь: Pngcrush не всегда уменьшает файл драматически. Если PNG уже был хорошо оптимизирован, выигрыш может быть минимальным или отсутствовать. Если файл содержит много лишних служебных данных, неудачные фильтры или неэффективный IDAT-поток, результат может быть заметным. Это нормальная логика lossless-оптимизации: программа не может выбросить пиксели или ухудшить картинку, поэтому максимальное сжатие ограничено содержимым конкретного изображения.

Для каких задач подходит Pngcrush

Pngcrush лучше всего раскрывается в задачах, где нужен не визуальный редактор, а управляемая обработка PNG. Программа рассчитана на тех, кто понимает, что файл изображения — это не только картинка на экране, но и контейнер с техническими данными.

Уменьшение PNG для сайта

Один из самых частых сценариев — оптимизация PNG перед публикацией на сайте. PNG часто используют для иконок, логотипов, схем, скриншотов интерфейса, элементов дизайна с прозрачностью. Такие файлы могут занимать больше места, чем необходимо, особенно если они экспортированы из графического редактора с лишними метаданными или не самым удачным сжатием.

Базовый вариант:

pngcrush logo.png logo.optimized.png

Более агрессивный вариант без потери качества:

pngcrush -brute -reduce logo.png logo.optimized.png

Первый вариант быстрее. Второй пробует больше комбинаций и может дать лучший размер, но работает дольше. Для одиночного важного файла это оправдано. Для тысячи изображений в проекте лучше сначала протестировать скорость на небольшой выборке.

Подготовка иконок и интерфейсных ассетов

Pngcrush хорошо подходит для иконок, кнопок, UI-элементов, пиктограмм, небольших скриншотов и другой графики, которая лежит в проекте годами и многократно загружается пользователями. В таких условиях даже небольшое уменьшение каждого файла имеет смысл.

Для иконок часто полезен параметр:

pngcrush -reduce icon.png icon.out.png

-reduce позволяет выполнить безопасное уменьшение представления данных. Если изображение фактически содержит меньше цветов, чем заявлено в PNG-структуре, Pngcrush может записать его компактнее. Это не художественное квантование цвета в стиле lossy-компрессоров, а безошибочная оптимизация там, где данные позволяют её выполнить.

Удаление лишних PNG-чанков

Некоторые PNG-файлы содержат текстовые комментарии, сведения о редакторе, дату, физическое разрешение, цветовые данные, которые не всегда нужны в веб-публикации. Pngcrush позволяет удалить часть вспомогательных чанков:

pngcrush -rem text screenshot.png screenshot.clean.png

Или удалить конкретные элементы:

pngcrush -rem tEXt -rem zTXt -rem iTXt screenshot.png screenshot.clean.png

Такой подход полезен, когда нужно убрать служебную информацию, но оставить пиксели. При этом нельзя бездумно удалять всё подряд: iCCP, sRGB, gAMA и tRNS могут влиять на цвет и прозрачность. Pngcrush даёт контроль, но ответственность за выбор параметров остаётся за пользователем.

Проверка проблемных PNG

Pngcrush можно использовать как диагностический инструмент. Команда с -n не записывает новый файл, а -v показывает подробный вывод:

pngcrush -n -v problem.png

Такой запуск помогает увидеть информацию о структуре файла, чанках, предупреждениях и ошибках. Если файл повреждён или содержит некорректные CRC, можно попробовать режим:

pngcrush -fix problem.png problem.fixed.png

-fix не является универсальным восстановителем любых повреждённых картинок, но он полезен при некоторых ошибках PNG-структуры и позволяет попытаться получить корректный выходной файл.

Пакетная обработка

Pngcrush удобно использовать не только для одного изображения, но и для набора файлов. Например, можно направить обработанные PNG в отдельный каталог:

pngcrush -d optimized *.png

Или добавить новое расширение:

pngcrush -e .crushed.png *.png

Эта модель особенно удобна в проектах, где изображения лежат в отдельных папках: assets, images, icons, screenshots, public/img. Pngcrush не пытается быть графическим batch-менеджером. Он рассчитан на командную строку, поэтому массовая обработка строится через оболочку.

Как работает сжатие в Pngcrush

Pngcrush уменьшает PNG не за счёт изменения картинки, а за счёт поиска более компактного способа записать те же данные. В PNG пиксельная информация находится в одном или нескольких чанках IDAT. Перед сжатием строки изображения проходят через фильтры PNG, а затем упаковываются deflate-сжатием на базе zlib.

Упрощённо процесс выглядит так:

  1. Pngcrush читает исходный PNG и его чанки.

  2. Анализирует параметры изображения: цветовой тип, битовую глубину, наличие прозрачности, палитры, профилей и текстовых данных.

  3. Пробует несколько вариантов фильтрации и zlib-сжатия.

  4. Сравнивает размер получающегося IDAT.

  5. Выбирает наиболее компактный вариант.

  6. Записывает новый PNG с теми же пикселями и заданной политикой по чанкам.

В Pngcrush важны три группы параметров: метод, фильтр и zlib-настройки.

Методы сжатия

Параметр -m задаёт метод, который нужно попробовать:

pngcrush -m 1 input.png output.png

Метод можно указывать несколько раз:

pngcrush -m 1 -m 4 -m 7 input.png output.png

Это полезно, когда нужно ограничить перебор и не запускать слишком тяжёлую оптимизацию. Метод 0 означает попытку набора основных методов. Высокие методы связаны с конкретными сочетаниями фильтра, уровня сжатия и стратегии.

PNG-фильтры

Параметр -f задаёт фильтр:

pngcrush -brute -f 0 input.png output.png

Основные типы фильтров:

Значение Смысл
0 без фильтра
1 Sub
2 Up
3 Average
4 Paeth
5 адаптивная фильтрация

Фильтр не меняет пиксели. Он меняет представление данных перед сжатием. Для одного изображения лучшим может быть Paeth, для другого — Sub, для третьего — отсутствие фильтра. Поэтому перебор фильтров имеет смысл: файл может стать меньше без какого-либо ухудшения.

Уровень zlib-сжатия

Параметр -l управляет уровнем сжатия:

pngcrush -l 9 input.png output.png

Уровни zlib находятся в диапазоне от 0 до 9. 0 означает отсутствие сжатия, 1 — быстрый вариант, 9 — максимальный уровень. Важно понимать: максимальный уровень не всегда гарантирует минимальный PNG в реальной комбинации с фильтрами и стратегиями, поэтому Pngcrush полезен именно как переборщик вариантов, а не просто как оболочка вокруг zlib level 9.

Стратегия zlib

Параметр -z задаёт стратегию:

pngcrush -brute -z 0 input.png output.png

Используются значения:

Значение Назначение
0 стандартная стратегия
1 стратегия с упором на смешанный подход
2 Huffman-only

Для обычного пользователя это выглядит технически, но в автоматизации удобно: можно зафиксировать стратегию, чтобы не тратить время на лишние варианты, или наоборот включить расширенный перебор.

Режим -brute

-brute — один из самых известных параметров Pngcrush:

pngcrush -brute input.png output.png

Он включает более широкий перебор методов. Для одной важной картинки это разумный способ выжать дополнительные проценты. Для большой папки с сотнями PNG его нужно применять осторожно: время обработки может резко вырасти. Pngcrush в таком режиме действует как brute force PNG optimizer: не угадывает один вариант, а системно пробует множество комбинаций.

Режим -reduce

-reduce отвечает за безопасное уменьшение представления изображения:

pngcrush -reduce input.png output.png

Этот параметр особенно полезен, когда файл содержит избыточную битовую глубину или цветовой тип. Например, если изображение формально записано как truecolor, но фактически содержит оттенки серого, возможна более компактная форма. Если PNG содержит палитру большего размера, чем реально нужно, Pngcrush может попытаться сократить её.

-reduce не равен lossy-квантованию. Он не заменяет pngquant. Это именно lossless-подход: уменьшать можно только то, что не меняет содержимое изображения.

Установка и запуск в Windows, Linux и macOS

Pngcrush не требует привычной установки с мастером, экраном приветствия и кнопкой Далее. Программа запускается как исполняемый файл из командной строки. Это важно учитывать: пользователь работает не через ярлык графического приложения, а через терминал.

В Windows это обычно pngcrush.exe. Команды выполняются в Command Prompt или PowerShell. В Linux и macOS бинарник запускается как pngcrush.

Проверка запуска

После того как исполняемый файл доступен в системе, базовая проверка выглядит так:

pngcrush -h

или:

pngcrush -version

Справочный вывод показывает синтаксис, параметры, юридические сведения, доступные режимы и особенности сборки. Если команда не находится, проблема не в PNG-файле, а в том, что исполняемый файл не находится в текущем каталоге или не добавлен в PATH.

Windows: Command Prompt и PowerShell

В Windows безопаснее сначала перейти в папку с изображениями или указать полные пути:

pngcrush.exe input.png output.png

Если путь содержит пробелы, используются кавычки:

pngcrush.exe "C:Imagesinput file.png" "C:Imagesoutput file.png"

Для перезаписи оригинала есть параметр -ow, но начинать с него не стоит:

pngcrush.exe -ow image.png

-ow удобен для автоматизации, но опасен для новичка. При ошибочной команде можно заменить файл, не оставив исходника рядом. Более безопасная схема — сначала записывать результат в новый файл.

Linux и macOS: Terminal

В Unix-подобных системах базовый запуск такой же:

pngcrush input.png output.png

Пакетная обработка через маску:

pngcrush -d optimized *.png

Если папка optimized уже существует, Pngcrush будет записывать туда файлы с теми же именами. Если нужна обработка с добавлением суффикса, удобно использовать -e:

pngcrush -e .crushed.png *.png

В результате рядом с исходными файлами появятся варианты с дополнительным расширением.

Почему не стоит начинать с перезаписи

Pngcrush хорошо подходит для командной строки, но именно поэтому требует дисциплины. Рабочий порядок должен быть таким:

  1. Сначала обработать один файл в новый результат.

  2. Сравнить размер.

  3. Открыть изображение и проверить отображение.

  4. Проверить прозрачность, цвет и фон.

  5. Только после этого запускать пакетную обработку.

  6. Перезапись -ow использовать только в копии проекта или под системой контроля версий.

Это особенно важно при удалении чанков. Сжатие IDAT без удаления данных почти всегда безопасно, а вот агрессивная чистка служебных блоков может изменить то, как изображение выглядит в отдельных программах.

Первый запуск и базовая команда

Самый простой сценарий Pngcrush — один входной PNG и один выходной PNG:

pngcrush input.png output.png

В этой команде:

  • pngcrush — имя программы;

  • input.png — исходный файл;

  • output.png — новый оптимизированный файл.

После запуска Pngcrush выводит информацию о чтении файла, методах сжатия, длине критических чанков, выбранном лучшем методе и проценте уменьшения. В выводе могут встречаться строки вида Best pngcrush method, critical chunk reduction, filesize reduction, CPU time. Именно по ним удобно понять, был ли реальный выигрыш.

Типичный вывод не надо читать как ошибку. Pngcrush подробно показывает, что он делает: какие методы пробует, какой размер получается, какой вариант оказался лучшим. Если программа пишет, что новый файл не меньше исходного, это не означает поломку. Это означает, что исходный PNG уже был сжат достаточно эффективно или выбранные параметры не дали выигрыша.

Безопасный первый тест

Для первой проверки лучше взять копию PNG и выполнить:

pngcrush -v input.png output.png

Параметр -v включает подробный вывод. Он помогает увидеть больше сведений о структуре файла и процессе оптимизации.

Если нужно только посмотреть информацию без записи результата:

pngcrush -n -v input.png

Здесь -n означает, что Pngcrush не будет выполнять сжатие и не будет записывать выходной файл. Такой режим полезен перед агрессивной чисткой метаданных.

Базовое сжатие с сохранением оригинала

Рабочий пример для сайта:

pngcrush banner.png banner.optimized.png

Затем можно сравнить размер:

ls -lh banner.png banner.optimized.png

Если результат устраивает, файл можно использовать в проекте. Если выигрыш мал, стоит попробовать:

pngcrush -brute -reduce banner.png banner.optimized.png

Если и это не даёт существенного результата, вероятно, PNG уже хорошо оптимизирован или сам тип изображения не подходит для сильного lossless-сжатия. Например, полноцветные скриншоты и изображения с большим количеством шумовых деталей часто сжимаются хуже, чем плоские иконки и схемы.

Основные параметры Pngcrush

Pngcrush воспринимается сложным из-за количества параметров. На практике их можно разделить на несколько групп: куда записывать результат, как сжимать, что делать с чанками, как управлять выводом и как вести себя с проблемными файлами.

Параметры входа и выхода

Параметр Что делает Пример
-d dir записывает результаты в указанную папку pngcrush -d out *.png
-e ext добавляет новое расширение к результатам pngcrush -e .crushed.png *.png
-ow перезаписывает исходный файл pngcrush -ow image.png
-force записывает выходной файл даже если он больше исходного pngcrush -force in.png out.png
-noforce не заставляет писать увеличенный результат pngcrush -noforce in.png out.png

-d удобен для аккуратной пакетной обработки. Например:

pngcrush -d optimized *.png

В этой схеме оригиналы остаются на месте, а оптимизированные файлы складываются отдельно. Это правильный вариант для больших папок.

-e нужен, когда хочется оставить файлы рядом:

pngcrush -e .min.png *.png

Если исходный файл называется logo.png, результат может получить имя с добавленным расширением. Такой подход удобен для сравнения, но в проектах с большим количеством файлов быстро создаёт лишние файлы в каталоге.

-ow перезаписывает файл на месте:

pngcrush -ow logo.png

Этот режим стоит использовать только тогда, когда есть резервная копия, Git, архив или другая возможность отката.

Параметры силы сжатия

Параметр Назначение
-brute широкий перебор методов
-m method выбор конкретного метода
-f filter выбор PNG-фильтра
-l level уровень zlib-сжатия
-z strategy стратегия zlib
-w size размер окна сжатия

Пример точечной настройки:

pngcrush -m 113 -f 0 -l 9 -z 0 input.png output.png

Для обычного пользователя это избыточно. Для повторяемого pipeline — полезно, если уже известно, какие параметры дают лучший результат на конкретном типе ассетов.

Параметры анализа и вывода

Параметр Назначение
-v подробный вывод
-q тихий режим
-n проверка без записи результата
-h справка
-version сведения о версии/сборке
-p пауза при заполнении экрана

Примеры:

pngcrush -n -v image.png
pngcrush -q image.png image.out.png

-q хорош для скриптов, где не нужен подробный лог. -v хорош для диагностики. -n -v — самый аккуратный способ посмотреть, что внутри PNG, не создавая новый файл.

Параметры исправления и принудительной обработки

-fix пытается исправить условия, которые иначе стали бы фатальными:

pngcrush -fix broken.png fixed.png

Это режим для проблемных файлов. Его не нужно включать постоянно на всякий случай. Если PNG нормальный, стандартной оптимизации достаточно.

-force нужен, когда требуется записать выходной файл даже при увеличении размера. Это может понадобиться, если пользователь не просто сжимает, а меняет чанки, добавляет pHYs, tEXt, sRGB или другие данные.

Параметры времени файла

Pngcrush умеет управлять временной меткой результата:

pngcrush -oldtimestamp input.png output.png

-oldtimestamp сохраняет дату изменения исходного файла. Это полезно в архивах, документации и проектах, где дата файла имеет значение.

pngcrush -newtimestamp input.png output.png

-newtimestamp ставит новую дату изменения. Такой вариант логичен, когда оптимизированный файл считается новым артефактом сборки.

Работа с PNG-чанками и метаданными

PNG устроен как набор чанков. Pngcrush умеет не только пересжимать IDAT, но и управлять вспомогательными данными. Именно это отличает его от многих простых PNG compressor инструментов: программа позволяет выполнять почти хирургическую работу со структурой файла.

Основные чанки, с которыми сталкивается пользователь

Чанк Что хранит Почему важен
IHDR базовые параметры изображения критический чанк
IDAT сжатые пиксельные данные главный объект оптимизации
IEND конец PNG критический чанк
PLTE палитра важна для indexed color
tRNS прозрачность влияет на отображение
gAMA гамма влияет на яркость
iCCP ICC-профиль влияет на цвет
sRGB стандартное цветовое пространство важно для единообразия цвета
pHYs физическое разрешение может быть нужно для печати/импорта
tEXt текстовые данные часто можно удалить
zTXt сжатый текст часто можно удалить
iTXt международный текст UTF-8 часто можно удалить
tIME время изменения обычно не влияет на картинку

Удаление текстовых чанков

Самый безопасный вариант чистки для публикации — удалить текстовые чанки:

pngcrush -rem text input.png output.png

-rem text удаляет текстовые формы. Это может убрать сведения вроде Software, Comment, Author, Description, Creation Time, если они записаны в текстовых чанках. Пиксели не меняются.

Можно удалить конкретные варианты:

pngcrush -rem tEXt -rem zTXt -rem iTXt input.png output.png

Такой вариант удобен, когда нужно явно показать, что удаляются именно текстовые данные.

Удаление pHYs и tIME

Если физическое разрешение и дата изменения внутри PNG не нужны, можно убрать их:

pngcrush -rem pHYs -rem tIME input.png output.png

Для веб-иконок и интерфейсных картинок это часто безопасно. Для материалов, которые дальше идут в печать, верстку PDF или техническую документацию, pHYs может быть важен.

Цветовые чанки: осторожная зона

Команда:

pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB input.png output.png

может уменьшить файл, но применять её надо осмысленно. Эти чанки относятся к цвету. Их удаление иногда меняет отображение в разных просмотрщиках, браузерах или графических редакторах. Для простых иконок это может быть несущественно. Для логотипов, интерфейсов с фирменными цветами, скриншотов и изображений, где важна цветовая точность, такой режим рискован.

Агрессивная чистка

В Pngcrush есть сокращённые варианты для удаления групп вспомогательных чанков:

pngcrush -rem alla input.png output.png
pngcrush -rem allb input.png output.png

Такие команды полезны для технических экспериментов, но их нельзя считать универсальным рецептом. Агрессивная чистка может удалить данные, которые нужны для корректного цвета, прозрачности, разрешения или последующей обработки. Для веб-папки с простыми иконками это может дать хороший результат. Для архива исходников — плохая идея.

Добавление текстового чанка

Pngcrush умеет не только удалять, но и добавлять текстовые данные:

pngcrush -text b "Software" "pngcrush" input.png output.png

Здесь -text добавляет tEXt-чанк, b указывает размещение до IDAT, ключ Software задаёт тип текстового поля, а значение "pngcrush" записывается как текст.

Также существуют варианты:

pngcrush -ztxt b "Comment" "optimized for web" input.png output.png
pngcrush -itxt b "Description" "Interface asset" input.png output.png

tEXt, zTXt и iTXt различаются кодировкой и способом хранения. Для большинства практических задач важен сам факт: Pngcrush может управлять текстовыми метаданными прямо из командной строки.

Добавление или изменение разрешения

Параметр -res записывает pHYs:

pngcrush -res 96 input.png output.png

Это полезно, если PNG должен не только отображаться на экране, но и нести информацию о предполагаемом физическом размере. Для чисто вебового использования это часто не нужно, но в технических процессах встречается.

Пакетная обработка файлов

Pngcrush удобно использовать в пакетных задачах. При этом важно понимать: сама программа не показывает окно с очередью, прогресс-баром, кнопкой Добавить папку и списком файлов. Пакетная обработка строится через параметры -d, -e, маски файлов и команды оболочки.

Обработка всех PNG в каталоге

Самый простой вариант:

pngcrush -d optimized *.png

Эта команда берёт все PNG в текущей папке и записывает результаты в каталог optimized. Такой способ хорош тем, что оригиналы не трогаются.

Обработка с новым расширением

pngcrush -e .crushed.png *.png

После обработки рядом с исходниками появляются новые файлы. Это удобно для сравнения, но не всегда удобно для чистого проекта.

Перезапись всех PNG

pngcrush -ow *.png

Этот вариант короткий, но рискованный. Его стоит выполнять только в копии папки или в репозитории, где можно откатить изменения. Если одновременно используются -rem и -reduce, проверка результата обязательна.

Bash-цикл для аккуратной обработки

mkdir -p optimized

for file in *.png; do
  pngcrush -brute -reduce "$file" "optimized/$file"
done

Такой сценарий понятен и управляем: исходные файлы остаются на месте, результаты лежат отдельно, параметры легко изменить.

PowerShell-цикл для Windows

New-Item -ItemType Directory -Force optimized

Get-ChildItem *.png | ForEach-Object {
    pngcrush.exe -brute -reduce $_.FullName ("optimized" + $_.Name)
}

Для Windows это удобнее, чем пытаться перенести bash-синтаксис. PowerShell корректно обрабатывает объекты файлов и позволяет строить более сложные сценарии.

Автоматизация через macOS Automator

Pngcrush можно встроить в контекстное действие macOS через Automator: пользователь выбирает PNG в Finder, запускает действие, а внутри выполняется shell script с вызовом pngcrush. Это не меняет природу программы: Pngcrush остаётся консольной утилитой, но получает удобный запуск из файлового менеджера.

Пример логики такого действия:

for f in "$@"
do
  filename=$(basename "$f")
  ext="${filename##*.}"
  if echo "$ext" | grep -i png; then
    /opt/homebrew/bin/pngcrush "$f" "$f.crushed_"
    mv "$f.crushed_" "$f"
  fi
done

Смысл простой: действие получает выбранные файлы, проверяет расширение, запускает Pngcrush, создаёт временный результат и заменяет исходный файл. В такой схеме особенно важно работать с резервной копией, потому что итоговый шаг mv перезаписывает оригинал.

Практические сценарии использования

Сжать PNG для сайта без потери качества

Для одного файла:

pngcrush -brute -reduce hero.png hero.optimized.png

Эта команда подходит для важного PNG, который загружается на сайте. -brute пробует больше вариантов, -reduce разрешает безопасное уменьшение представления. После выполнения нужно сравнить размер:

ls -lh hero.png hero.optimized.png

Если файл стал меньше и визуально открывается корректно, результат можно использовать.

Удалить текстовые метаданные перед публикацией

pngcrush -rem text screenshot.png screenshot.public.png

Команда подходит для скриншотов, технических изображений и материалов, где не нужны комментарии, сведения о программе-источнике или авторские текстовые поля внутри PNG. Она не должна удалять пиксели, но всё равно стоит проверить результат.

Сохранить оригиналы и сложить результат отдельно

mkdir -p optimized
pngcrush -d optimized *.png

Это хороший рабочий шаблон. Он не трогает исходники и позволяет спокойно сравнить папки.

Проверить проблемный PNG

pngcrush -n -v broken.png

Если вывод показывает ошибки, можно попробовать:

pngcrush -fix broken.png broken.fixed.png

После этого файл надо открыть в нескольких просмотрщиках или использовать в той программе, для которой он предназначен. Исправление структуры не всегда означает, что файл идеально подходит для любого пайплайна.

Максимально ужать файл без потери пикселей

pngcrush -brute -reduce -rem text input.png output.png

Это разумный сильный вариант: широкий перебор, безопасное уменьшение представления, удаление текстовых данных. Более агрессивный вариант:

pngcrush -brute -reduce -rem alla input.png output.png

Его надо использовать только после проверки, потому что удаляются многие вспомогательные чанки.

Подготовить набор иконок

mkdir -p icons-optimized

for file in icons/*.png; do
  name=$(basename "$file")
  pngcrush -reduce "$file" "icons-optimized/$name"
done

Для иконок -reduce особенно уместен: такие изображения часто содержат ограниченную палитру, плоские области цвета и прозрачность.

Добавить служебный комментарий

pngcrush -text b "Software" "pngcrush" input.png output.png

Этот сценарий встречается реже, но полезен в controlled pipeline: можно явно пометить, что файл прошёл через оптимизацию.

Установить разрешение

pngcrush -res 96 input.png output.png

Такой вариант нужен, если последующая программа учитывает pHYs. Для обычных веб-иконок это обычно не главный параметр, но для документационных изображений бывает полезен.

Производительность и качество результата

Pngcrush сохраняет качество изображения в рамках lossless-оптимизации. Это означает, что результат не должен получать JPEG-артефакты, размытость, потерю деталей, ступеньки на градиентах или искажение прозрачности из-за самого сжатия IDAT. Программа ищет более компактную упаковку тех же данных.

Скорость зависит от нескольких факторов:

  • размера изображения;

  • количества пикселей;

  • типа изображения;

  • количества цветов;

  • наличия альфа-канала;

  • выбранных параметров;

  • режима -brute;

  • скорости CPU;

  • дисковой подсистемы при массовой обработке.

Обычный запуск может быть быстрым. -brute может быть заметно медленнее. Если обрабатывается одна иконка, разница несущественна. Если обрабатывается каталог из тысячи PNG, разница становится критичной.

Практически Pngcrush лучше использовать в трёх режимах:

Режим Команда Когда применять
Быстрый pngcrush in.png out.png первичная оптимизация
Усиленный pngcrush -reduce in.png out.png иконки, UI, простая графика
Максимальный pngcrush -brute -reduce in.png out.png важные файлы, где размер критичен

Pngcrush не всегда выигрывает у современных инструментов по скорости. Утилиты вроде Oxipng используют многопоточность и современную реализацию, поэтому часто удобнее для больших партий. Но Pngcrush остаётся ценным там, где нужен точный контроль над чанками и предсказуемая командная логика.

История версий программы

История Pngcrush — это история постепенного развития консольного PNG-оптимизатора вокруг libpng, zlib, исправления ошибок PNG-структуры, поддержки новых чанков и улучшения поведения при разных сборках. У программы нет типичной маркетинговой эволюции с редизайном интерфейса, потому что графического интерфейса у неё нет. Изменения касались прежде всего формата PNG, совместимости, безопасности, методов обработки и поведения параметров.

Ранние ветки 1.5 и 1.6

В ранней истории Pngcrush формировалась основная модель работы: чтение PNG, перебор фильтров и методов сжатия, запись более компактного результата. Ветки 1.5 и 1.6 важны тем, что программа стала не просто инструментом сжатия, а средством для работы с PNG-структурой.

В ветке 1.6 появлялись и уточнялись возможности, которые важны и в практическом использовании:

  • работа с gAMA, tRNS, iCCP и текстовыми чанками;

  • исправления, связанные с zlib и libpng;

  • поддержка дополнительных PNG-чанков;

  • поведение при неизвестных чанках;

  • опции временных меток -newtimestamp и -oldtimestamp;

  • улучшенная обработка нестандартных и проблемных PNG.

Параметры временных меток особенно показательны: Pngcrush используется не только как инструмент уменьшения файла, но и как часть технических процессов, где дата изменения может быть важна.

Ветка 1.7

Ветка 1.7 стала заметным этапом развития программы. В ней усилилась совместимость с новыми libpng, менялась обработка APNG-элементов, улучшались проверки, исправлялись ошибки при работе с палитрой, цветовым типом, текстовыми чанками и Windows-сборками.

Для пользователя важны несколько направлений:

  • появилась и закрепилась практичная логика перезаписи через -ow;

  • улучшалась работа с wildcard-аргументами в Windows-среде;

  • дорабатывались предупреждения при невозможности безопасного -reduce;

  • исправлялись проблемы с -text и -ztext;

  • улучшалась обработка PNG с ошибками фильтрации;

  • развивалась совместимость с APNG-чанками при определённых условиях.

Ветка 1.7 также хорошо показывает характер Pngcrush: программа развивалась не через добавление визуальных функций, а через точность, совместимость и исправление реальных проблем, которые возникали у пользователей PNG.

Переход к 1.8

Переход к ветке 1.8 важен тем, что поведение -reduce и -force стало более значимым в обычном сценарии. Удалялись устаревшие параметры, упрощалась внутренняя логика, обновлялись libpng и zlib, исправлялись ошибки обработки и сборки.

В ветке 1.8 заметны такие направления:

  • улучшение поведения при проверке CRC и ADLER32;

  • работа с производительностью декодирования;

  • поддержка аппаратных оптимизаций вроде ARM NEON и SSE в отдельных частях;

  • исправления сборки nolib;

  • добавление -benchmark n;

  • исправления поведения -version;

  • правки для macOS и разных системных окружений.

Для конечного пользователя история версий означает следующее: Pngcrush — зрелая техническая утилита, которая много лет дорабатывалась вокруг реальных нюансов PNG, libpng, zlib, Windows, Unix-систем, macOS и нестандартных файлов. Это не программа, которая делает одну простую операцию приблизительно. Она содержит большой набор режимов, потому что PNG как формат допускает много технических вариантов хранения данных.

Плюсы и минусы Pngcrush

Плюсы

Сжатие без потери качества.
Pngcrush не ухудшает изображение ради размера. Это ключевой плюс для интерфейсной графики, логотипов, скриншотов, схем и файлов, где пиксельная точность важнее максимальной экономии.

Точный контроль над PNG-структурой.
Параметры -rem, -text, -ztxt, -itxt, -res, -srgb, -trns, -g, -replace_gamma позволяют работать не только с размером, но и с содержимым PNG-контейнера.

Подходит для автоматизации.
Командный интерфейс удобен для CI, Makefile, shell-скриптов, PowerShell, пакетной обработки и сборочных задач.

Есть режимы диагностики.
-n, -v, -fix делают Pngcrush полезным инструментом для проверки и анализа проблемных PNG.

Гибкая пакетная обработка.
-d, -e, -ow позволяют выбрать, как сохранять результат: отдельно, рядом или поверх исходника.

Открытый код и зрелая история.
Pngcrush давно используется в технической среде и хорошо вписывается в open-source pipeline.

Минусы

Нет графического интерфейса.
Для пользователей, которые ожидают кнопку Сжать, предпросмотр и drag-and-drop, Pngcrush выглядит неудобно.

Синтаксис требует внимания.
Ошибиться с -ow, -rem alla или путями легко. Программа не будет переспрашивать в стиле графического приложения.

-brute может быть медленным.
Максимальный перебор не всегда оправдан, особенно на больших партиях.

Не всегда даёт заметный выигрыш.
Если PNG уже оптимизирован, Pngcrush может уменьшить его на доли процента или не уменьшить совсем.

Не заменяет lossy-инструменты.
Если нужна радикальная экономия размера и допустимо уменьшение количества цветов, лучше смотреть в сторону pngquant. Pngcrush работает в другой логике.

Сравнение с аналогами

Pngcrush находится в одном поле с другими PNG-оптимизаторами, но не все они решают одну и ту же задачу. Одни делают lossless-пересжатие, другие применяют lossy-квантование, третьи ориентированы на экстремальное сжатие ценой времени, четвёртые являются универсальными наборами инструментов для работы с изображениями.

Программа Тип обработки Интерфейс Сильная сторона Ограничение
OptiPNG lossless командная строка простой recompress PNG и конвертация BMP/GIF/PNM/TIFF в PNG меньше ручного контроля над отдельными PNG-чанками
Oxipng lossless командная строка/библиотека высокая скорость, многопоточность, удобство для массовой обработки меньше классической хирургии чанков в стиле Pngcrush
pngquant lossy командная строка/библиотека сильное уменьшение размера через 8-битный PNG с альфой меняет представление цветов, не является строгим lossless
ZopfliPNG lossless командная строка очень плотное Deflate-сжатие высокая нагрузка на CPU и долгое время обработки
ImageMagick зависит от команды командная строка и набор утилит универсальная обработка, конвертация, resize, strip не специализирован только на тонком подборе PNG-фильтров
PNGOUT lossless командная строка/обёртки сильное PNG-сжатие в отдельных случаях менее удобен как прозрачный open-source pipeline

OptiPNG

OptiPNG ближе всего по назначению: это PNG optimizer, который пересжимает файлы без потери информации. Он часто проще для повседневного применения: команда вида optipng file.png понятна, а уровни оптимизации позволяют быстро выбрать баланс между временем и результатом.

OptiPNG особенно удобен, когда нужно не только оптимизировать PNG, но и конвертировать некоторые внешние форматы в PNG. В типовом веб-проекте он может быть проще: меньше параметров, меньше риска ошибиться, понятная модель запустил — получил оптимизированный PNG.

Pngcrush выигрывает там, где нужно управлять конкретными чанками: удалить tEXt, оставить или убрать gAMA, добавить pHYs, проверить вывод через -n -v, включить -fix.

Oxipng

Oxipng — современный многопоточный lossless PNG/APNG optimizer. Его сильная сторона — скорость и удобство массовой обработки. Для больших каталогов ассетов Oxipng часто выглядит более современным решением: он хорошо подходит для автоматизации и быстро обрабатывает много файлов.

Если задача звучит как быстро пройтись по папке PNG и уменьшить всё без потери качества, Oxipng часто удобнее. Если задача звучит как точно удалить такие-то чанки, добавить текстовый чанк, сохранить дату, проверить проблемный файл и контролировать PNG-структуру, Pngcrush остаётся более характерным инструментом.

pngquant

pngquant решает другую задачу. Это lossy PNG compressor, который значительно уменьшает размер за счёт преобразования изображения в более компактный 8-битный PNG с альфа-прозрачностью. Для веба это часто даёт сильный выигрыш, особенно на изображениях, где небольшое изменение палитры незаметно.

Но pngquant нельзя считать прямой заменой Pngcrush. Если нужен pixel-identical output, pngquant не подходит. Если нужен минимальный вес для сайта и допустима потеря части цветовой точности, pngquant может быть эффективнее.

На практике их иногда используют вместе: сначала pngquant для уменьшения палитры, затем lossless-оптимизатор для финальной упаковки. Но это уже другой pipeline, не чистая без потерь оптимизация исходного PNG.

ZopfliPNG

ZopfliPNG ориентирован на плотное lossless-сжатие. Он может давать очень компактный результат, но обычно требует больше CPU-времени. Его логика подходит для финальной подготовки статичных ассетов, которые один раз долго сжимаются и потом долго раздаются пользователям.

Для ежедневной обработки во время разработки ZopfliPNG может быть слишком медленным. Pngcrush в обычном режиме быстрее и гибче по работе с чанками. В режиме -brute Pngcrush тоже может быть медленным, но характер нагрузки и набор возможностей отличаются.

ImageMagick

ImageMagick — универсальный набор инструментов для изображений. Он умеет менять размер, формат, глубину, профиль, метаданные, выполнять strip, конвертацию и множество других операций. Это не узкий PNG optimizer, а большой графический инструмент командной строки.

ImageMagick полезен, если нужно не только оптимизировать PNG, но и предварительно изменить изображение: обрезать, уменьшить, конвертировать, наложить фон, изменить формат. Pngcrush лучше использовать после такой обработки как специализированный финальный шаг для PNG.

Кому стоит использовать Pngcrush

Pngcrush стоит использовать тем, кому важны контроль, повторяемость и работа без графического интерфейса. Это инструмент не для случайного пользователя, который хочет один раз уменьшить картинку перед отправкой в мессенджер. Это программа для тех, кто работает с PNG как с частью технического процесса.

Хорошо подходит

Pngcrush подходит:

  • веб-разработчикам;

  • frontend-инженерам;

  • разработчикам приложений;

  • авторам технической документации;

  • администраторам сайтов;

  • пользователям Linux/macOS/Windows, уверенно работающим с командной строкой;

  • тем, кто хранит графику в Git и хочет оптимизировать ассеты перед коммитом;

  • тем, кто хочет удалять или добавлять конкретные PNG-чанки;

  • тем, кто собирает pipeline обработки изображений.

Не лучший выбор

Pngcrush не лучший выбор, если нужно:

  • сжимать изображения через красивое окно;

  • видеть предпросмотр до и после;

  • массово перетаскивать файлы мышью;

  • получить максимальное уменьшение любой ценой;

  • сжимать JPEG, WebP, AVIF или GIF;

  • редактировать картинку визуально;

  • менять размеры изображений.

Для таких задач лучше использовать другие программы: графические редакторы, онлайн-компрессоры, ImageMagick, pngquant, Squoosh, ImageOptim или специализированные GUI-обёртки.

Частые ошибки и осторожность

Ошибка 1. Сразу использовать -ow

Команда:

pngcrush -ow *.png

выглядит удобно, но опасна. Она перезаписывает исходные файлы. Если вместе с ней применены агрессивные параметры удаления чанков, вернуть исходное состояние без резервной копии не получится.

Лучше начинать так:

pngcrush -d optimized *.png

Ошибка 2. Удалять все чанки без проверки

Команды вроде:

pngcrush -rem alla input.png output.png

или:

pngcrush -rem allb input.png output.png

нельзя считать универсальными. Они могут быть полезны, но только после понимания, какие данные удаляются. Для логотипов и изображений с важным цветом удаление iCCP, gAMA, sRGB может быть нежелательным.

Ошибка 3. Ждать огромного уменьшения любого PNG

Pngcrush не обязан уменьшать каждый файл на 50–80%. PNG lossless compression имеет предел. Если исходный файл уже хорошо упакован, выигрыш будет небольшим.

Ошибка 4. Сравнивать напрямую с pngquant

pngquant часто уменьшает PNG сильнее, но делает это за счёт lossy-квантования. Pngcrush сохраняет пиксели. Это разные классы инструментов. Сравнение имеет смысл только при понимании: нужен strict lossless или допустима потеря части цветовой информации.

Ошибка 5. Использовать -brute на огромной папке без теста

Перед запуском:

pngcrush -brute -reduce -d optimized *.png

лучше проверить 5–10 файлов. Если результат даёт экономию 0,2%, а время обработки растёт в десятки раз, такой режим не нужен.

Ошибка 6. Не проверять прозрачность

PNG часто используют из-за альфа-канала. После любых операций с -c, -trns, -rem и -reduce нужно открыть результат на разных фонах. Особенно это важно для иконок, логотипов и интерфейсных элементов.

Дополнительные возможности, которые расширяют применение Pngcrush

Изменение цветового типа

Параметр -c задаёт цветовой тип результата:

pngcrush -c 0 input.png output.png

Цветовые типы PNG:

Тип Назначение
0 grayscale без альфа-канала
2 truecolor без альфа-канала
3 indexed color
4 grayscale с альфа-каналом
6 truecolor с альфа-каналом

Использовать -c надо аккуратно. Например, преобразование в grayscale имеет смысл только тогда, когда изображение действительно серое. Удаление альфа-канала допустимо только тогда, когда прозрачность не нужна.

Работа с фоном через -bkgd

Параметр -bkgd задаёт фоновый цвет:

pngcrush -bkgd 255 255 255 input.png output.png

Это не заливка изображения в редакторском смысле. Речь идёт о PNG-чанке, который некоторые просмотрщики могут использовать как предлагаемый фон. Для старых или специфических сценариев это полезно, но не заменяет полноценную обработку прозрачности.

Прозрачность через -trns

Параметр -trns добавляет чанк прозрачности, если его нет:

pngcrush -trns 0 255 255 255 255 input.png output.png

Команда требует всех параметров, потому что прозрачность в PNG зависит от цветового типа и битовой глубины. Это не самый частый бытовой сценарий, но для технической подготовки PNG он важен.

sRGB через -srgb

Параметр -srgb задаёт rendering intent:

pngcrush -srgb 0 input.png output.png

Значения:

Значение Смысл
0 perceptual
1 relative colorimetric
2 saturation
3 absolute colorimetric

Для обычной оптимизации сайта этот параметр трогают редко. Для управляемых цветовых процессов он может быть важен.

Gamma через -g и -replace_gamma

Добавить gAMA, если его нет:

pngcrush -g 45455 input.png output.png

Заменить существующий:

pngcrush -replace_gamma 45455 input.png output.png

Число интерпретируется как gamma × 100000. Например, 45455 соответствует примерно 1/2.2. Это технический параметр, который влияет на отображение яркости в программах, учитывающих gamma.

Пример рабочего пайплайна для проекта

Для проекта с PNG-ассетами можно использовать несколько уровней обработки.

1. Диагностика

pngcrush -n -v assets/logo.png

Сначала полезно посмотреть, что находится в файле: какие чанки есть, нет ли предупреждений, насколько файл уже оптимизирован.

2. Безопасная оптимизация

mkdir -p assets-optimized
pngcrush -reduce -d assets-optimized assets/*.png

Это сохраняет исходники и выполняет умеренную оптимизацию.

3. Тест отображения

После обработки нужно открыть результаты:

  • на светлом фоне;

  • на тёмном фоне;

  • в браузере;

  • в графическом просмотрщике;

  • в приложении или сборке, где они реально используются.

4. Агрессивная оптимизация выбранных файлов

pngcrush -brute -reduce -rem text assets/logo.png assets-optimized/logo.png

Такой режим лучше применять к важным файлам, а не ко всей папке без разбора.

5. Перезапись только после проверки

pngcrush -ow -reduce assets/logo.png

Этот шаг допустим, когда результат уже протестирован и есть возможность отката.

Итоговая оценка

Pngcrush — строгая, техническая и зрелая консольная утилита для оптимизации PNG без потери качества. Она не пытается быть простой графической программой и не подходит тем, кто хочет работать мышью через окно предпросмотра. Зато она хорошо делает то, для чего создана: пересжимает IDAT, пробует разные PNG-фильтры и zlib-настройки, умеет управлять вспомогательными чанками и легко встраивается в автоматизацию.

Главная ценность Pngcrush — контроль. Пользователь может выполнить обычное сжатие, включить -brute, разрешить -reduce, удалить только текстовые чанки, сохранить временную метку, записать результат в отдельную папку, проверить файл без записи, попытаться исправить проблемный PNG. Такой набор возможностей важен не для разовой бытовой задачи, а для рабочих процессов, где PNG-файлы являются частью сайта, приложения, документации или сборочного pipeline.

Слабая сторона программы очевидна: командная строка и большое количество параметров повышают порог входа. Новичку легко запутаться в -rem, -c, -trns, -g, -srgb, -m, -f, -l, -z. Но для пользователя, который понимает формат PNG и хочет не просто сжать картинку, а контролировать результат, Pngcrush остаётся полезным инструментом.

Оптимальный вывод такой: Pngcrush стоит использовать для точечной и автоматизированной lossless-оптимизации PNG, особенно когда важны структура файла, метаданные, прозрачность и повторяемость команд. Для максимально простого массового сжатия можно выбрать более современный многопоточный инструмент. Для радикального уменьшения размера с потерей части цветовой информации — lossy-компрессор. Но если нужна именно управляемая оптимизация PNG без потери качества, Pngcrush по-прежнему занимает своё место.