Pngcrush — это специализированная программа для оптимизации PNG-файлов через командную строку. Она не пытается улучшить картинку визуально, не применяет художественные фильтры и не меняет изображение ради эффектного результата. Ее задача уже и точнее: уменьшить размер PNG-файла за счет подбора более удачных параметров сжатия, работы с IDAT-данными и управления служебными PNG-блоками. Pngcrush запускается из консоли Windows, UNIX или Linux и работает как CLI-инструмент: пользователь вводит команду, указывает входной PNG, выходной PNG и набор параметров.
Программа особенно полезна там, где важны сжатие PNG без потерь, контроль метаданных, пакетная обработка изображений, подготовка графики для сайта, оптимизация интерфейсных иконок, уменьшение веса PNG-ассетов и проверяемый результат без визуальной деградации. В отличие от онлайн-компрессоров, Pngcrush не строится вокруг веб-интерфейса: его сильная сторона — точные параметры, повторяемость команд и удобство включения в скрипты.

Что делает Pngcrush
Главная функция Pngcrush — уменьшение размера PNG-файла за счет повторного сжатия IDAT-потока. В PNG именно IDAT содержит сжатые данные изображения, поэтому программа перебирает разные PNG-фильтры и уровни zlib-сжатия, сравнивает результат и сохраняет вариант с меньшим размером. Все штатные методы фильтрации и сжатия, которые Pngcrush использует для оптимизации IDAT, являются lossless: изображение не теряет качество из-за самого пересжатия.
Практически Pngcrush выполняет несколько типов задач:
-
оптимизирует PNG-файл без изменения видимого изображения;
-
подбирает более выгодный метод фильтрации строк PNG;
-
пересжимает IDAT-данные;
-
удаляет лишние ancillary chunks, то есть вспомогательные PNG-блоки;
-
добавляет или заменяет отдельные служебные блоки, например
gAMA,tRNS,iCCP,tEXt,iTXt,zTXt; -
может выполнять lossless-уменьшение глубины цвета или типа цвета через
-reduce; -
позволяет задавать выходную папку, новое расширение, перезапись файла и режим подробного вывода.
Pngcrush не является универсальным конвертером изображений. Это именно оптимизатор PNG-файлов. Он не предназначен для художественной обработки, ретуши, масштабирования с интерполяцией, цветокоррекции как в редакторе или пакетного ресайза в стиле ImageMagick. Его сфера — PNG compression, PNG optimization, IDAT recompression, chunk manipulation и подготовка файлов к более компактному хранению.
Скачать Pngcrush
- Ретушь фото
- Русский интерфейс
- Просто для новичков
- Только командная строка
- Не для ретуши фото
- Только PNG-сжатие
Интерфейс программы
Интерфейс Pngcrush — командная строка. У программы нет окон с панелью инструментов, кнопками Open, Save, Optimize или областью предпросмотра. Основные элементы интерфейса — это команда pngcrush, параметры, имена файлов и текстовый вывод в консоли. Это делает программу менее удобной для новичка, но более предсказуемой для разработчика, верстальщика, администратора сборки, специалиста по оптимизации сайта или пользователя, который обрабатывает много PNG-файлов регулярно.
Базовая форма команды выглядит так:
pngcrush [options] infile.png outfile.png
Для пакетной обработки используется форма с выходной директорией:
pngcrush -d output_dir *.png
Для создания файлов с новым расширением используется форма:
pngcrush -e .crushed.png *.png
Эти варианты отражают реальную модель работы Pngcrush: один файл — один выходной файл, много файлов — выходная папка или новое расширение. Параметры -d и -e специально предназначены для сценариев, где нужно не вручную переименовывать каждый PNG, а обработать группу файлов одной командой.
Как Pngcrush уменьшает размер PNG
PNG-файл хранит изображение не как простой набор пикселей в открытом виде. Данные изображения проходят фильтрацию по строкам, затем сжимаются. Pngcrush использует это устройство формата: он пробует разные способы фильтрации и параметры сжатия, измеряет размер получившегося IDAT-потока и выбирает лучший вариант.
Важный момент: выигрыш зависит от конкретной картинки. На одних PNG результат может быть заметным, на других — минимальным. Лучше всего Pngcrush проявляет себя на файлах, которые были сохранены неоптимально: скриншоты, иконки, UI-графика, изображения с большими однотонными областями, PNG с лишними метаданными, ассеты, экспортированные редактором без тщательной настройки сжатия.
Типичная логика работы такая:
-
Pngcrush читает входной PNG.
-
Анализирует его критические и вспомогательные блоки.
-
Пробует несколько методов пересжатия IDAT.
-
Сравнивает размеры вариантов.
-
Записывает выходной PNG, если новый вариант подходит по условиям.
-
Показывает статистику: длину критических данных, лучший метод, процент уменьшения и время работы.
В выводе программы обычно видны строки вроде Recompressing IDAT chunks, Total length of data found in critical chunks, Critical chunk length, Best pngcrush method, filesize reduction. Именно по ним удобно понимать, что программа сделала с файлом и насколько успешным оказалось сжатие.
Базовая оптимизация одного PNG-файла
Самый простой сценарий — передать входной и выходной файл:
pngcrush input.png output.png
Эта команда запускает оптимизацию с настройками по умолчанию. Pngcrush читает input.png, создает output.png и применяет свои стандартные методы пересжатия. Даже без дополнительных параметров программа может уменьшить размер файла, потому что она пересохраняет PNG с другими параметрами IDAT-сжатия.
Такой вариант подходит для безопасной первичной проверки. Пользователь сохраняет оригинал нетронутым и получает отдельный файл для сравнения. После обработки можно проверить:
ls -lh input.png output.png
На Windows аналогичный смысл дает просмотр размера файла в проводнике или команда:
dir input.png output.png
Если выходной файл меньше и визуально совпадает с оригиналом, команда отработала правильно. Для технической проверки можно дополнительно сравнить изображение в просмотрщике, браузере или пайплайне сборки.
Оптимизация с максимальным перебором методов
Для более агрессивной lossless-оптимизации используется параметр -brute:
pngcrush -brute input.png output.png
-brute включает перебор большого набора сочетаний фильтров и параметров сжатия. Этот режим работает медленнее, но способен найти меньший IDAT-поток, чем обычный запуск. Он ресурсоемкий, потому что программа пробует много filter/compression methods.
Практический смысл -brute простой: его стоит применять не ко всем временным изображениям подряд, а к финальным PNG-файлам, которые попадут в сайт, приложение, игру, архив ресурсов или дистрибутив. Для тысячи больших PNG такой режим может занять много времени, зато для набора иконок, логотипов, UI-элементов и готовых ассетов он дает более аккуратный результат.
Команда с -brute особенно уместна для:
-
финальных PNG-иконок;
-
ассетов веб-интерфейса;
-
графики мобильного приложения;
-
небольших изображений с прозрачностью;
-
скриншотов документации;
-
файлов, которые редко меняются, но часто загружаются пользователями.
Удаление лишних вспомогательных блоков
PNG-файл может содержать не только данные изображения, но и дополнительные блоки: текстовые комментарии, сведения о гамме, цветовые профили, физическое разрешение, время создания и другие служебные данные. Pngcrush умеет удалять такие блоки через -rem.
Пример удаления текстовых блоков:
pngcrush -rem text input.png output.png
Пример удаления известных вспомогательных блоков, кроме прозрачности:
pngcrush -rem alla input.png output.png
Пример удаления более широкого набора вспомогательных данных:
pngcrush -rem allb input.png output.png
Параметр -rem требует аккуратности. Вспомогательные блоки не всегда мусор. Например, tRNS связан с прозрачностью, gAMA влияет на интерпретацию яркости, iCCP хранит цветовой профиль, pHYs может описывать физическое разрешение. Если PNG используется как веб-иконка, декоративная графика или технический ассет, удаление лишних метаданных часто оправдано. Если файл нужен для печати, цветокоррекции, архива или точного воспроизведения в разных средах, удалять блоки нужно осторожно.
Lossless-уменьшение глубины цвета через -reduce
Параметр -reduce включает попытку уменьшить тип цвета или битовую глубину без потери информации изображения:
pngcrush -reduce input.png output.png
Например, если PNG сохранен с избыточной глубиной цвета, но фактически не использует весь диапазон, Pngcrush может записать более компактное представление. Это не то же самое, что lossy-квантование. -reduce ориентирован на безопасное уменьшение там, где данные позволяют представить изображение проще.
Часто используемая команда для практической оптимизации выглядит так:
pngcrush -brute -rem alla -reduce input.png output.png
В этой связке:
-
-bruteищет более удачный метод сжатия; -
-rem allaудаляет известные вспомогательные блоки, кроме критически важных для прозрачности; -
-reduceпытается уменьшить цветовой тип или битовую глубину без потери изображения.
Такой вариант подходит для веб-графики, где важны маленький размер PNG, быстрая загрузка и отсутствие лишних данных внутри файла.
Перезапись исходного файла
Для обработки с заменой исходного PNG используется -ow:
pngcrush -ow image.png
-ow означает overwrite: Pngcrush записывает результат поверх исходного файла. Этот режим удобен для автоматизации, но его нельзя считать безопасным первым шагом. Перед массовым использованием -ow лучше протестировать команду на копии папки или сначала выводить оптимизированные файлы в отдельную директорию.
Более осторожный вариант:
mkdir optimizedpngcrush -d optimized *.png
-d указывает директорию для выходных файлов, при этом имена файлов сохраняются. Это хороший режим для пакетной оптимизации, когда нужно сравнить папку optimized с исходной папкой и только потом заменять файлы в проекте.
Пакетная обработка PNG-файлов
Pngcrush хорошо подходит для пакетной обработки. Его можно запускать по маске:
pngcrush -d optimized *.png
Так обрабатываются все PNG в текущей директории, а результат попадает в папку optimized. Для вложенных папок обычно используют shell-скрипт, find, for или систему сборки.
Пример для Linux/macOS:
mkdir -p optimizedfor file in *.png; do pngcrush "$file" "optimized/$file"done
Пример с более плотной оптимизацией:
mkdir -p optimizedfor file in *.png; do pngcrush -brute -rem alla -reduce "$file" "optimized/$file"done
Пример для Windows CMD:
mkdir optimizedfor %f in (*.png) do pngcrush "%f" "optimized\%f"
В скриптах Pngcrush удобен тем, что его вывод можно анализировать, перенаправлять в лог, использовать в CI/CD и запускать одинаково для набора ресурсов. Это сильное отличие от графических оптимизаторов: результат не зависит от того, какие галочки случайно нажал пользователь в интерфейсе.
Автоматизация Pngcrush через macOS Automator
Pngcrush можно встроить в пользовательский workflow. На macOS типовой способ — создать Quick Action в Automator, добавить действие Run Shell Script, передать входные изображения как аргументы и выполнить команду Pngcrush для каждого PNG. В Automator используются конкретные элементы интерфейса: тип документа Quick Action, кнопка Choose, действие Run Shell Script, настройка Workflow receives current image files in Finder.app, параметр Pass input: as arguments, после чего действие можно сохранить как PNG Crush.

Пример shell-логики внутри Automator:
for f in "$@"do filename=$(basename "$f") ext="${filename##*.}" if echo "$ext" | grep -i png; then pngcrush "$f" "$f.crushed_" mv "$f.crushed_" "$f" fidone
Такой workflow превращает консольный Pngcrush в пункт контекстного меню Finder. Пользователь выбирает PNG-файл или группу PNG-файлов, открывает контекстное меню, переходит в Services и запускает PNG Crush. Это не меняет природу программы: внутри всё равно работает CLI-команда, но запуск становится удобнее для повседневной обработки отдельных изображений.

Основные параметры Pngcrush
| Параметр | Что делает | Когда использовать |
|---|---|---|
-brute |
Перебирает расширенный набор методов фильтрации и сжатия | Для финальной оптимизации PNG, когда важен минимальный размер |
-rem chunkname |
Удаляет указанный вспомогательный PNG-блок | Для удаления комментариев, служебных данных и лишних chunks |
-rem alla |
Удаляет известные ancillary chunks, кроме tRNS |
Для веб-графики, где прозрачность нужно сохранить |
-rem allb |
Удаляет все, кроме tRNS и gAMA |
Когда нужно сильнее чистить файл, но оставить прозрачность и гамму |
-reduce |
Делает lossless-уменьшение color type или bit depth | Для PNG с избыточной глубиной цвета |
-d dir |
Записывает выходные файлы в указанную папку | Для пакетной обработки без замены исходников |
-e ext |
Задает новое расширение выходных файлов | Для массового создания копий с новым именованием |
-ow |
Перезаписывает исходный файл | Для автоматизации после проверки команды |
-q |
Уменьшает объем вывода | Для скриптов и тихой пакетной обработки |
-s |
Подавляет вывод, включая предупреждения | Для полностью тихого режима, когда лог не нужен |
-v |
Показывает более подробную информацию | Для диагностики и анализа PNG |
-n |
Не пишет выходной файл | Для тестов, анализа и проверки скорости декодирования |
-fix |
Пытается исправить фатальные условия вроде плохих CRC | Для проблемных PNG, которые нужно попытаться прочитать |
-force |
Записывает выходной файл даже если он больше | Для случаев, когда важны изменения chunks, а не только размер |
-res dpi |
Записывает pHYs с разрешением в dpi |
Для файлов, где нужно указать физическое разрешение |
-text |
Добавляет tEXt chunk |
Для записи текстового комментария |
-itxt |
Добавляет iTXt chunk |
Для UTF-8-текста и интернационализированных подписей |
-ztxt |
Добавляет сжатый zTXt chunk |
Для текстовых данных, которые лучше хранить сжатыми |
-srgb |
Задает rendering intent для sRGB |
Для управления цветовым назначением |
-oldtimestamp |
Сохраняет исходное время изменения файла | Для архивов и сборок, где важны timestamps |
-newtimestamp |
Обновляет время изменения файла | Для обычного пересохранения результата |
Многие параметры Pngcrush относятся не к визуальному редактированию, а к структуре PNG-файла. Это принципиальное отличие от графических редакторов: программа работает с тем, как PNG хранит изображение и служебные данные, а не с тем, как пользователь рисует или меняет картинку.
Работа с цветовым типом и битовой глубиной
Pngcrush умеет управлять color type через -c и bit depth через -bit_depth. PNG поддерживает несколько типов цвета: grayscale, truecolor, indexed color, grayscale with alpha, truecolor with alpha. Выбор подходящего типа влияет на размер, потому что разные изображения требуют разного способа хранения данных. Например, простая черно-белая графика может храниться компактнее как grayscale, а полноцветное изображение с альфой требует truecolor with alpha.
Пример принудительного преобразования к grayscale без alpha:
pngcrush -c 0 input.png output.png
Пример указания truecolor без alpha:
pngcrush -c 2 input.png output.png
Такие команды нужно применять только тогда, когда пользователь понимает, что делает. Если у изображения есть значимая прозрачность, удаление alpha channel изменит его смысл. Если цветная иконка принудительно переводится в grayscale, это уже не просто оптимизация размера, а изменение изображения. Для безопасной автоматической оптимизации чаще используют -reduce, потому что он рассчитан на lossless-сокращение, когда данные действительно позволяют это сделать.
Работа с gamma, sRGB и цветовыми профилями
Pngcrush умеет добавлять и заменять служебные цветовые блоки. Например, -g добавляет gAMA, если такого блока нет, а -replace_gamma принудительно заменяет gamma-значение. Параметр -srgb задает rendering intent для sRGB chunk. Такие функции нужны не каждому пользователю, но они важны для тех, кто работает с PNG как с форматом, а не просто как с картинкой.
Пример записи разрешения:
pngcrush -res 300 input.png output.png
Пример добавления текстового комментария:
pngcrush -text b "Comment" "Optimized with pngcrush" input.png output.png
Пример добавления сжатого текстового блока:
pngcrush -ztxt b "Comment" "Compressed text metadata" input.png output.png
Для веб-оптимизации чаще делают обратное: не добавляют метаданные, а удаляют лишние. Но наличие таких параметров показывает, что Pngcrush — не просто сжималка PNG, а инструмент для точечной работы с внутренней структурой PNG-файла.
Как читать вывод Pngcrush
После запуска Pngcrush выводит техническую информацию о процессе. Самые важные строки:
Recompressing IDAT chunks in input.png to output.pngTotal length of data found in critical chunks = ...Critical chunk length, method ...Best pngcrush method = ...filesize reductionCPU time decode, encode, other, total
Recompressing IDAT chunks означает, что программа пересжимает данные изображения. Total length of data found in critical chunks показывает объем критических данных. Строки Critical chunk length, method отображают проверяемые методы. Best pngcrush method показывает метод, который дал лучший результат. filesize reduction показывает процент уменьшения размера файла. В подробном режиме через -v информации становится больше.
Пример команды для диагностики:
pngcrush -n -v image.png
-n не записывает выходной файл, а -v показывает подробности. Это полезно, если нужно изучить PNG, посмотреть структуру и оценить, есть ли смысл в дальнейшей оптимизации.
Практические сценарии использования
Оптимизация PNG для сайта
Для сайта обычно важны малый вес файла, сохранение прозрачности и отсутствие лишних метаданных. Подходит команда:
pngcrush -brute -rem alla -reduce input.png output.png
Она сохраняет видимое изображение, пробует усиленную оптимизацию, удаляет известные вспомогательные блоки и пытается уменьшить цветовое представление без потери данных. Такой подход хорошо подходит для PNG-иконок, декоративных элементов, иллюстраций интерфейса и скриншотов документации.
Обработка папки с ассетами
Для проекта с множеством PNG лучше не перезаписывать исходники сразу:
mkdir optimizedpngcrush -d optimized *.png
После проверки результата файлы из optimized можно использовать в сборке. Этот сценарий удобен для фронтенд-проектов, тем оформления, мобильных приложений и игровых ресурсов.
Подготовка PNG к хранению в репозитории
Для репозитория важно, чтобы изображения были компактными, а команда — воспроизводимой:
pngcrush -brute -rem alla -reduce source.png source.optimized.png
После проверки можно зафиксировать оптимизированный файл в Git. Плюс такого подхода — понятная история: видно, какой файл был обработан и какой командой.
Проверка без записи результата
Если нужно понять, как Pngcrush будет вести себя с файлом, но не создавать выходной PNG:
pngcrush -n -v image.png
Это полезно для диагностики проблемных изображений, проверки структуры PNG и анализа того, какие chunks присутствуют внутри файла.
Перезапись после проверки
Когда команда уже проверена на копии, можно использовать:
pngcrush -ow -brute -rem alla -reduce image.png
Такой режим удобен в автоматизации, но он должен применяться осознанно. Если исходные PNG нужны как архивные оригиналы, лучше не использовать -ow в рабочей папке.
Где Pngcrush особенно силен
Pngcrush хорошо подходит для ситуаций, где важна предсказуемая lossless-оптимизация:
-
PNG-иконки;
-
элементы пользовательского интерфейса;
-
изображения с прозрачностью;
-
графика для сайтов;
-
ассеты приложений;
-
скриншоты с большими однотонными областями;
-
PNG, сохраненные графическим редактором с лишними chunks;
-
изображения, которые нужно обрабатывать в скриптах;
-
пайплайны сборки, где оптимизация должна быть повторяемой.
Особенно ценна способность Pngcrush не только пересжимать IDAT, но и управлять служебными блоками. Многие PNG-файлы становятся тяжелее из-за комментариев, профилей, временных меток, физических размеров, цветовой информации и прочих данных, которые не всегда нужны в веб-графике. Pngcrush позволяет не гадать, а явно указать, что оставить и что удалить.
Где Pngcrush не лучший выбор
Pngcrush не стоит воспринимать как универсальный способ сделать PNG максимально маленьким любой ценой. Он не является lossy-компрессором и не заменяет pngquant, если допустима потеря части цветовой информации ради сильного уменьшения размера. Он не заменяет графический интерфейс ImageOptim, если пользователю нужно просто перетащить файлы мышью. Он не является современным многопоточным оптимизатором уровня Oxipng, если главный критерий — скорость на больших наборах PNG.
Pngcrush также может быть невыгоден для уже хорошо оптимизированных PNG. Если файл уже обработан сильным оптимизатором, повторный запуск может дать нулевой или очень небольшой выигрыш. Это нормально: программа не ломает изображение ради красивого процента.
Плюсы и минусы Pngcrush
| Плюсы | Минусы |
|---|---|
| Оптимизация PNG без потери качества | Нет графического интерфейса |
| Подробный контроль параметров | Требуется понимание командной строки |
| Работа с IDAT, PNG-фильтрами и zlib-сжатием | -brute может быть медленным |
| Удаление и добавление chunks | Не всегда дает большой выигрыш на уже оптимизированных PNG |
| Подходит для скриптов и автоматизации | Параметры вроде -rem, -c, -g требуют осторожности |
Есть пакетная обработка через -d и -e |
Не является lossy-компрессором |
| Можно использовать в build pipeline | Не предназначен для редактирования изображения как графический редактор |
Сравнение с аналогами
OptiPNG
OptiPNG близок к Pngcrush по идеологии: это PNG optimizer, который пересжимает изображения без потери информации. Он также работает с идеей поиска более компактного представления PNG и ориентирован на lossless-результат. OptiPNG часто используют как более прямой оптимизатор: запустил с уровнем оптимизации — получил файл.
Разница в том, что Pngcrush сильнее воспринимается как инструмент для точечной работы с chunks и ручной настройки поведения. OptiPNG чаще используют как простой оптимизатор без глубокого вмешательства в структуру PNG. Pngcrush удобнее там, где нужно явно удалить tEXt, сохранить или изменить gAMA, управлять pHYs, добавить iTXt или контролировать детали вывода.
| Критерий | Pngcrush | OptiPNG |
|---|---|---|
| Тип работы | CLI-оптимизатор PNG | CLI-оптимизатор PNG |
| Потери качества | Нет при обычной IDAT-оптимизации | Нет |
| Управление chunks | Очень развитое | Есть, но фокус больше на оптимизации |
| Удобство для простого запуска | Среднее | Выше |
| Гибкость для PNG-структуры | Высокая | Средняя/высокая |
| Подходит для скриптов | Да | Да |
Oxipng
Oxipng — современный lossless PNG/APNG optimizer, написанный на Rust. Он многопоточный, быстрый и хорошо подходит для массовой обработки PNG. Его типовая команда вроде oxipng -o 4 --strip safe --alpha *.png выглядит проще для повседневной оптимизации, а уровни оптимизации дают понятный баланс скорости и степени сжатия.
Pngcrush уступает Oxipng по удобству массовой быстрой обработки, но остается полезным для сценариев, где нужно тонко управлять PNG chunks и использовать проверенную CLI-модель с конкретными параметрами. Oxipng лучше для современных пайплайнов, где важны скорость, многопоточность и короткие команды. Pngcrush лучше для точечной работы и старых сценариев, где команда уже встроена в инструменты или скрипты.
| Критерий | Pngcrush | Oxipng |
|---|---|---|
| Основной формат | PNG | PNG/APNG |
| Многопоточность | Не главный акцент | Да |
| Скорость на больших наборах | Ниже | Выше |
| Управление chunks | Подробное | Есть через strip-настройки |
| Простота команды | Ниже | Выше |
| Роль в пайплайне | Точная оптимизация и chunk surgery | Быстрая массовая оптимизация |
pngquant
pngquant решает другую задачу. Это lossy PNG compressor: он уменьшает размер PNG за счет преобразования изображения в палитровое представление с ограниченным количеством цветов и адаптивным dithering. Такой подход может уменьшать файлы значительно сильнее, но результат уже не является строго тем же изображением на уровне данных.
Pngcrush выбирают, когда нужен PNG без потери качества. pngquant выбирают, когда допустима визуально контролируемая потеря цвета ради гораздо меньшего веса. Частый практический сценарий — сначала pngquant для lossy-уменьшения, затем lossless-оптимизатор для финального пересжатия. Но если проект требует идентичного изображения, pngquant не заменяет Pngcrush.
| Критерий | Pngcrush | pngquant |
|---|---|---|
| Тип сжатия | Lossless | Lossy |
| Основной метод | Пересжатие IDAT, фильтры, chunks | Квантование цветов, палитра, dithering |
| Сохранение исходных цветов | Да при обычной оптимизации | Нет, цвета приближаются |
| Степень уменьшения | Обычно умеренная | Часто значительно выше |
| Подходит для UI-иконок | Да | Да, если потери допустимы |
| Подходит для архивного оригинала | Да | Нет |
ZopfliPNG / zopflipng
ZopfliPNG использует Zopfli compression для Deflate и ориентирован на очень плотное PNG-сжатие ценой гораздо большего времени работы. Он сравнивает стратегии scanline filters, выбирает подходящий color type, удаляет неважные для веба chunks и может выполнять дополнительные оптимизации вроде изменения скрытых цветов полностью прозрачных пикселей.
Pngcrush рациональнее для случаев, где нужен баланс контроля и времени. ZopfliPNG уместен, когда файл финальный, изображений немного, а минимальный размер важнее скорости. Для больших каталогов Zopfli-подход может быть слишком медленным.
| Критерий | Pngcrush | ZopfliPNG / zopflipng |
|---|---|---|
| Основная цель | Lossless PNG optimization с контролем chunks | Максимально плотное Deflate-сжатие PNG |
| Скорость | Обычно быстрее | Обычно медленнее |
| Степень сжатия | Хорошая | Часто выше |
| Управление метаданными | Подробное | Есть, но фокус на web-оптимизации |
| Лучшее применение | Регулярная оптимизация и скрипты | Финальный прогон важных PNG |
ImageOptim
ImageOptim — графическая macOS-программа, которая объединяет несколько оптимизаторов, включая MozJPEG, pngquant, Pngcrush, 7zip, SVGO и Google Zopfli. Она работает по принципу drag-and-drop, удаляет лишние метаданные и сжимает изображения без потери качества в стандартном режиме.
Pngcrush — один из инструментов, которые могут быть частью такого GUI-подхода. Если пользователю нужно просто перетащить файлы и получить результат, ImageOptim удобнее. Если нужно точно управлять параметрами, писать скрипты, выбирать -rem, -reduce, -brute, -d, -ow, то Pngcrush дает больше прямого контроля.
| Критерий | Pngcrush | ImageOptim |
|---|---|---|
| Интерфейс | Командная строка | Графический drag-and-drop |
| Контроль параметров | Высокий | Ограничен настройками GUI |
| Набор форматов | PNG | Несколько форматов |
| Встроенные инструменты | Самостоятельный CLI | Комбинирует несколько оптимизаторов |
| Автоматизация | Через shell/CI/scripts | Через приложение и интеграции |
| Лучшее применение | Точная PNG-обработка | Быстрая оптимизация для пользователя macOS |
PNGOUT
PNGOUT — другой CLI-оптимизатор PNG, известный сильным Deflate-сжатием и ориентацией на минимальный размер. PNGOUT может давать очень компактные файлы, но часто требует более ручного подбора параметров. Pngcrush удобнее как автоматический инструмент перебора и пакетной обработки. PNGOUT интересен там, где пользователь готов тратить больше времени на ручную настройку ради нескольких дополнительных процентов. Для массовой повторяемой оптимизации Pngcrush часто практичнее.
| Критерий | Pngcrush | PNGOUT |
|---|---|---|
| Интерфейс | CLI | CLI |
| Подбор методов | Автоматизированный | Больше ручного контроля |
| Пакетная обработка | Есть через -d, -e, shell |
Нет встроенного batch mode |
| Потенциал минимального размера | Хороший | Очень высокий при удачных настройках |
| Удобство в скриптах | Высокое | Среднее |
| Лучшее применение | Повторяемая PNG-оптимизация | Тонкая ручная дооптимизация |
Типичные ошибки при работе с Pngcrush
Использовать -ow без резервной копии
-ow удобен, но опасен при первом запуске. Если команда удаляет нужные chunks или меняет служебные данные, исходник уже заменен. Правильнее сначала делать так:
pngcrush input.png output.png
или так:
pngcrush -d optimized *.png
И только после проверки переходить к -ow.
Удалять все chunks без понимания
Команды с -rem могут быть полезны, но не все ancillary chunks лишние. Для веб-иконки удаление комментариев и части метаданных обычно нормально. Для изображения, где важны цветовой профиль, gamma или физическое разрешение, агрессивная чистка может быть нежелательной.
Ожидать огромного уменьшения размера всегда
Pngcrush не творит магию. Если PNG уже хорошо оптимизирован, результат может быть маленьким. Если изображение является сложной полноцветной картинкой с шумом или фотографическим содержимым, PNG сам по себе может быть неподходящим форматом для минимального веса. Pngcrush уменьшит только то, что можно уменьшить в рамках lossless PNG.
Сравнивать Pngcrush с lossy-компрессорами напрямую
pngquant, TinyPNG-подобные сервисы и некоторые режимы современных оптимизаторов могут резко уменьшать размер за счет потерь. Pngcrush работает иначе: он сохраняет изображение без визуального ухудшения при стандартной оптимизации. Поэтому сравнение с lossy-компрессорами не означает, что Pngcrush хуже. Это разные классы задач.
Рекомендованные команды для разных задач
| Задача | Команда |
|---|---|
| Простая оптимизация одного файла | pngcrush input.png output.png |
| Усиленная оптимизация | pngcrush -brute input.png output.png |
| Веб-оптимизация с удалением лишних blocks | pngcrush -brute -rem alla -reduce input.png output.png |
| Обработка всех PNG в папке | pngcrush -d optimized *.png |
| Создание копий с новым расширением | pngcrush -e .crushed.png *.png |
| Перезапись после проверки | pngcrush -ow -brute -rem alla -reduce image.png |
| Подробная диагностика | pngcrush -n -v image.png |
| Сохранение старого timestamp | pngcrush -oldtimestamp input.png output.png |
| Добавление pHYs-разрешения | pngcrush -res 300 input.png output.png |
| Удаление текстовых chunks | pngcrush -rem text input.png output.png |
Безопасный рабочий процесс
Оптимальный порядок работы с Pngcrush такой:
-
Сначала обработать один файл без перезаписи.
-
Сравнить размер исходника и результата.
-
Открыть оба изображения в целевом просмотрщике или браузере.
-
Проверить прозрачность, цвет и внешний вид.
-
Если используется
-rem, убедиться, что удаленные chunks не нужны. -
Прогнать команду на копии папки.
-
Только после этого использовать
-owили подключать команду к автоматизации.
Для веб-графики часто достаточно команды:
pngcrush -brute -rem alla -reduce input.png output.png
Для осторожной универсальной оптимизации:
pngcrush input.png output.png
Для массовой обработки без риска:
mkdir optimizedpngcrush -d optimized *.png
Производительность и практическая скорость
Скорость Pngcrush зависит от размера PNG, сложности изображения и выбранных параметров. Обычный запуск работает быстрее, -brute — заметно медленнее. Это ожидаемая цена за перебор большого количества сочетаний фильтров и сжатия.
Для небольших UI-изображений время обычно не критично. Для больших каталогов с тысячами PNG лучше выбирать стратегию:
-
сначала прогнать быстрый базовый режим;
-
затем применять
-bruteтолько к финальным или крупным файлам; -
использовать пакетную обработку по папкам;
-
запускать несколько независимых процессов, если нужно распараллелить работу на уровне shell;
-
не использовать агрессивные параметры в каждом промежуточном билде.
Pngcrush особенно хорошо вписывается в пайплайн, где оптимизация выполняется не на каждом сохранении файла, а на финальном этапе подготовки ресурсов.
Качество результата
При обычной оптимизации Pngcrush не снижает качество изображения. Он меняет способ хранения и сжатия данных, а не рисует новые пиксели. Поэтому результат подходит для интерфейсной графики, скриншотов, технических изображений и ассетов, где нельзя допустить JPEG-подобные артефакты.
Но некоторые параметры могут менять не только размер. Например, принудительное изменение color type через -c, удаление alpha channel, изменение gamma или удаление цветового профиля может повлиять на то, как файл интерпретируется в конкретном приложении. Поэтому Pngcrush безопасен настолько, насколько безопасна выбранная команда. Базовое пересжатие и -reduce — это одно; агрессивная чистка chunks и ручное изменение цвета — другое.
Для кого подходит Pngcrush
Pngcrush подходит пользователям, которым нужна не красивая кнопка Сжать, а точный инструмент:
-
веб-разработчикам;
-
верстальщикам;
-
разработчикам приложений;
-
специалистам по производительности сайтов;
-
авторам документации со множеством PNG-скриншотов;
-
разработчикам игр с PNG-ассетами;
-
администраторам build pipeline;
-
пользователям Linux/macOS/Windows, которым удобно работать с CLI;
-
тем, кто хочет повторяемую оптимизацию PNG без загрузки файлов в онлайн-сервисы.
Для новичка Pngcrush может показаться сухим и неудобным. Но если задача повторяется регулярно, команда один раз подбирается и затем работает годами: в shell-скрипте, Makefile, npm script, CI job, Automator workflow или другом сценарии автоматизации.
Итоговая оценка
Pngcrush — надежный и точный оптимизатор PNG-файлов для командной строки. Его главные достоинства — lossless-сжатие, работа с IDAT, управление PNG chunks, пакетная обработка и хорошая пригодность для автоматизации. Он не пытается быть графическим редактором и не конкурирует с drag-and-drop-приложениями по удобству. Его сильная сторона — контроль.
Программа лучше всего раскрывается в задачах, где нужно уменьшить размер PNG без потери качества, удалить лишние метаданные, сохранить прозрачность, подготовить веб-графику или встроить PNG optimization в сборку проекта. Если нужна максимальная простота — удобнее ImageOptim. Если нужна высокая скорость и многопоточность — сильным конкурентом будет Oxipng. Если допустимы потери ради сильного уменьшения размера — подойдет pngquant. Но если нужен классический консольный инструмент для аккуратной оптимизации PNG и работы со структурой файла, Pngcrush остается прямым и практичным выбором.