Pngcrush: программа для сжатия PNG

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

Скачать Pngcrush

БесплатноОптимизацияWindows

Для сжатия и оптимизации файлов

⬇ Скачать ФотоМАСТЕР бесплатно
⬇ Скачать Pngcrush бесплатно

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

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

Pngcrush в терминале: запуск с параметрами -v, -reduce и -brute

Содержание

Что такое Pngcrush

Pngcrush — консольная утилита для оптимизации файлов Portable Network Graphics. Её рабочая область — внутреннее устройство PNG: IDAT chunks, PNG filters, zlib compression, ancillary chunks, сведения о прозрачности, гамме, цветовых профилях и текстовых метаданных. В отличие от фоторедактора, Pngcrush не предлагает ретушь, кадрирование, кисти, слои или цветокоррекцию. Она работает на уровне структуры файла.

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

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

Pngcrush работает не только с самим сжатием. Она умеет удалять ненужные ancillary chunks, добавлять или заменять отдельные служебные chunks, управлять гаммой, прозрачностью, текстовыми комментариями, режимом RGB/sRGB, физическим разрешением и некоторыми другими параметрами PNG. Поэтому программу используют не только как PNG compressor, но и как инструмент для аккуратной технической правки PNG-файлов.

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

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

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

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

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

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

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

Установка и первый запуск

Pngcrush распространяется как небольшая командная утилита. На Windows обычно используется исполняемый файл pngcrush.exe; на Linux и macOS программа запускается из терминала командой pngcrush. В любом случае пользователь работает не с окном редактора, а с Command Prompt, PowerShell, Terminal, bash, zsh или другой оболочкой.

На Windows типовой сценарий выглядит так: пользователь скачивает архив с программой, распаковывает его в отдельную папку, открывает Command Prompt или PowerShell, переходит в каталог с pngcrush.exe через cd и запускает команду. Если путь к программе добавлен в переменную PATH, запускать pngcrush можно из любой рабочей папки.

На Linux Pngcrush часто устанавливают через пакетный менеджер дистрибутива. После установки команда становится доступной в shell. На macOS программа также используется через Terminal; удобнее всего работать с ней из папки, где лежат изображения, или указывать абсолютные пути к файлам.

Проверить запуск можно командой:

pngcrush -version

или командой справки:

pngcrush -h

Если программа установлена корректно, в терминале появляется текстовый вывод с версией, сведениями о сборке и списком параметров. Именно это и есть интерфейс Pngcrush: строка команды, аргументы, сообщения об обработке и итоговый отчёт.

Интерфейс Pngcrush: что пользователь реально видит

Интерфейс Pngcrush состоит из нескольких элементов:

Элемент Что означает
pngcrush имя исполняемой программы
параметры перед файлами режимы работы: -brute, -reduce, -rem, -ow, -d, -e, -q, -v
входной PNG исходный файл, который нужно обработать
выходной PNG файл, в который будет записан результат
строки отчёта информация о методах, IDAT length, выбранном варианте и итоговом уменьшении
сообщения об ошибках предупреждения о некорректных chunks, CRC, путях и параметрах

Команда обычно строится по схеме:

pngcrush [параметры] input.png output.png

Например:

pngcrush image.png image-crushed.png

В такой команде image.png — исходный PNG, а image-crushed.png — новый оптимизированный файл. Pngcrush не открывает окно сохранения, не спрашивает имя через диалог и не показывает предпросмотр. Все действия задаются текстом.

В выводе программы встречаются строки вида Recompressing, Total length of data found in critical chunks, IDAT length with method, Best pngcrush method, IDAT reduction, filesize reduction, CPU time. Эти строки важны: по ним пользователь видит, что именно программа попробовала и насколько уменьшился файл.

Базовое сжатие одного PNG-файла

Самый простой вариант работы — передать входной и выходной файл:

pngcrush input.png output.png

Эта команда запускает стандартную оптимизацию PNG. Pngcrush читает input.png, пробует свои обычные методы recompression и создаёт output.png. Такой способ безопасен: исходник остаётся нетронутым, а результат можно открыть в просмотрщике, сравнить визуально и проверить размер.

Для реальной папки со скриншотами команда может выглядеть так:

pngcrush screenshot.png screenshot-crushed.png

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

Важно понимать, что Pngcrush не ухудшает качество ради меньшего размера. В обычном сценарии программа не удаляет пиксели, не меняет разрешение, не делает изображение размытым и не снижает JPEG quality, потому что JPEG quality к PNG вообще не относится. Она ищет более компактный способ записать те же данные.

На практике базовая команда подходит для:

  • отдельных PNG-скриншотов;

  • небольших иконок;

  • логотипов с прозрачностью;

  • интерфейсных элементов;

  • изображений для документации;

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

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

Перезапись исходного файла: параметр -ow

Параметр -ow используется, когда результат нужно записать поверх исходного PNG:

pngcrush -ow image.png

Такой режим удобен, когда исходные файлы уже сохранены в резервной копии или находятся под контролем версий. Например, если папка с ассетами лежит в Git, пользователь может запустить pngcrush -ow *.png, а затем посмотреть изменения через git diff --stat или просто проверить размеры файлов.

Однако -ow требует аккуратности. При перезаписи сложнее быстро вернуться к исходной версии, если пользователь одновременно удалял chunks, менял гамму или применял агрессивные параметры. Для первого прохода безопаснее писать результат в отдельную папку, а -ow использовать уже после того, как подходящие настройки проверены.

Пример для одного файла:

pngcrush -ow logo.png

Пример для нескольких PNG в текущей папке:

pngcrush -ow *.png

На Windows поведение маски *.png зависит от того, где именно запускается команда и какая оболочка используется. В PowerShell и Command Prompt обработка масок может отличаться от Unix-shell. Поэтому для массовой обработки на Windows часто удобнее использовать отдельный .bat-файл или запускать команду по одному файлу, если набор небольшой.

Вывод файлов в отдельную папку: -d

Параметр -d задаёт каталог для выходных файлов:

pngcrush -d crushed *.png

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

Перед запуском папку лучше создать заранее:

mkdir crushedpngcrush -d crushed *.png

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

Параметр -d не меняет смысл оптимизации. Он управляет местом сохранения. Это полезно именно как организационный инструмент: не смешивать исходные файлы, временные результаты и финальную графику.

Новый суффикс или расширение через -e

Параметр -e задаёт новое расширение или суффикс для выходных файлов:

pngcrush -e _crushed.png image.png

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

Для серии файлов команда может выглядеть так:

pngcrush -e _optimized.png *.png

В рабочем процессе веб-разработчика это позволяет быстро получить пары файлов: исходный button.png и обработанный button_optimized.png, исходный header.png и обработанный header_optimized.png. После проверки можно оставить только нужные версии.

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

Интенсивная оптимизация: -brute

Параметр -brute запускает более жёсткий перебор вариантов сжатия:

pngcrush -brute input.png output.png

В этом режиме Pngcrush пробует больше filter/compression methods. Программа перебирает варианты фильтрации PNG-строк, уровни zlib compression и стратегии, а затем выбирает тот метод, который даёт наименьший IDAT chunk. В отчёте пользователь видит множество строк IDAT length with method или Critical chunk length, method, после чего появляется Best pngcrush method.

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

Пример:

pngcrush -brute logo.png logo-crushed.png

Более практичный вариант — сочетать -brute с сохранением в отдельный каталог:

mkdir crushedpngcrush -brute -d crushed *.png

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

Параметр -reduce: уменьшение цветности и структуры PNG

Параметр -reduce включает попытки уменьшить PNG за счёт безопасного сокращения представления данных:

pngcrush -reduce input.png output.png

В некоторых случаях PNG может быть записан в более широком формате, чем нужно изображению. Например, файл может хранить RGB-данные там, где достаточно grayscale, или использовать больший bit depth, чем реально требуется. -reduce помогает сократить такие избыточные данные без визуального изменения изображения.

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

pngcrush -reduce icon.png icon-reduced.png

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

Важно не путать -reduce с lossy-сжатием. Pngcrush не превращает картинку в приблизительную копию. Но пользователь всё равно должен проверять результат, потому что PNG-файл может содержать служебные сведения, связанные с цветом, прозрачностью и отображением. Особенно внимательно стоит проверять изображения с фирменными цветами, логотипы, UI-графику и файлы с ICC-профилем.

Часто -reduce используют вместе с -brute:

pngcrush -reduce -brute input.png output.png

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

Удаление chunks и метаданных через -rem

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

Pngcrush удаляет такие блоки через параметр -rem:

pngcrush -rem tEXt input.png output.png

Эта команда удаляет chunk tEXt, если он есть в файле. Для удаления всех текстовых chunks можно использовать:

pngcrush -rem text input.png output.png

В PNG встречаются разные типы текстовых блоков: tEXt, zTXt, iTXt. Когда задача состоит в удалении комментариев, служебных подписей или лишней информации, вариант -rem text удобнее, чем перечисление каждого типа вручную.

Для более агрессивной очистки используют:

pngcrush -rem alla input.png output.png

-rem alla удаляет известные ancillary chunks, но сохраняет tRNS, потому что прозрачность часто критична для PNG. Это полезно для веб-графики, где не нужны комментарии, дата, часть цветовых сведений и прочая вспомогательная информация.

При этом удалять chunks нужно осознанно. Например, iCCP, gAMA, sRGB и cHRM связаны с цветовым отображением. Для обычной технической иконки их удаление часто проходит незаметно, а для логотипа с точным цветом или изображения, где важен цветовой менеджмент, результат нужно проверять в браузере и просмотрщике.

Примеры точечного удаления:

pngcrush -rem gAMA input.png output.png
pngcrush -rem iCCP input.png output.png
pngcrush -rem pHYs input.png output.png

Если нужно удалить несколько chunks, параметр повторяют:

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

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

Работа с гаммой, прозрачностью и цветовыми сведениями

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

Для гаммы используется chunk gAMA. Добавить значение гаммы можно через параметр -g:

pngcrush -g 45455 input.png output.png

Значение 45455 соответствует примерно 1/2.2, потому что параметр передаётся как целое число в формате GAMMA * 100000. Если в файле уже есть gAMA, для принудительной замены используется -replace_gamma:

pngcrush -replace_gamma 45455 input.png output.png

Для sRGB применяется параметр -srgb:

pngcrush -srgb 0 input.png output.png

У -srgb есть значения rendering intent. На практике такие параметры нужны не каждому пользователю, но они важны для тех, кто готовит PNG с контролируемым цветовым поведением.

Прозрачность задаётся через tRNS. Например, Pngcrush может вставлять tRNS chunk, если его нет в файле. Это не замена графическому редактору, где пользователь визуально выделяет область прозрачности, но для технической обработки PNG такая возможность полезна.

Текстовые chunks можно вставлять через -text, -ztxt и -itxt:

pngcrush -text b Author "Project Team" input.png output.png

Здесь b означает размещение перед IDAT. Для размещения после IDAT используется a:

pngcrush -text a Comment "Optimized with pngcrush" input.png output.png

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

Проверка PNG и исправление проблем: -fix, -n, -v

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

pngcrush -v input.png output.png

Если повторить параметр, вывод станет ещё подробнее:

pngcrush -v -v input.png output.png

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

Параметр -n позволяет не выполнять сжатие и не записывать новый файл:

pngcrush -n -v input.png

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

Параметр -fix помогает обработать файлы с ошибками, которые иначе могли бы считаться фатальными:

pngcrush -fix input.png fixed.png

Например, если в PNG есть проблема с CRC, программа может попытаться пройти через неё и записать исправленный файл. Но -fix не нужно воспринимать как универсальное восстановление повреждённых картинок. Если PNG физически обрезан, содержит неполные IDAT chunks или сильно повреждён, Pngcrush не обязан его спасти.

Хороший рабочий сценарий для диагностики:

pngcrush -n -v suspicious.png

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

pngcrush -fix suspicious.png suspicious-fixed.png

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

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

Pngcrush удобен для пакетной обработки. Именно здесь командная строка становится преимуществом: можно обработать не один файл, а всю папку с изображениями.

Простейший вариант:

mkdir crushedpngcrush -d crushed *.png

Эта команда создаёт оптимизированные версии всех PNG из текущей папки и складывает их в crushed. Для финального прохода можно добавить -reduce и -brute:

mkdir crushedpngcrush -reduce -brute -d crushed *.png

Для Unix-подобной оболочки можно использовать цикл:

mkdir -p crushedfor file in *.png; do  pngcrush -reduce -brute "$file" "crushed/$file"done

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

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

for file in *.png; do  pngcrush -reduce -brute "$file" "tmp-$file" && mv "tmp-$file" "$file"done

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

На Windows похожий сценарий можно оформить в .bat:

mkdir crushedfor %%f in (*.png) do pngcrush -reduce -brute "%%f" "crushed%%f"

Для PowerShell вариант будет другим:

New-Item -ItemType Directory -Force crushedGet-ChildItem *.png | ForEach-Object {    pngcrush -reduce -brute $_.FullName "crushed$($_.Name)"}

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

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

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

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

Для регулярной работы удобно разделять режимы:

Сценарий Команда
Быстрая проверка одного файла pngcrush input.png output.png
Аккуратная оптимизация с сокращением структуры pngcrush -reduce input.png output.png
Финальный проход для важных ассетов pngcrush -reduce -brute input.png output.png
Массовая обработка в отдельную папку pngcrush -reduce -d crushed *.png
Подробная диагностика pngcrush -n -v input.png

Для CI/CD и автоматической сборки чаще выбирают не самый тяжёлый режим, а стабильный компромисс. Например, -reduce без -brute может быть достаточно хорош для регулярных прогонов, а -brute можно оставить для ручной подготовки финального релиза.

Что значит сжатие PNG без потерь

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

Но в PNG есть важный нюанс: файл содержит не только пиксели. Если пользователь удаляет chunks, связанные с цветом, прозрачностью или метаданными, видимое поведение файла в некоторых программах может измениться. Например, удаление текстовых комментариев обычно никак не влияет на картинку. А удаление iCCP, gAMA, sRGB или cHRM может изменить интерпретацию цвета в средах, где учитывается цветовой менеджмент.

Поэтому в Pngcrush нужно различать несколько действий:

Действие Влияние
recompression IDAT обычно не меняет видимые пиксели
подбор PNG filters не меняет изображение
-reduce может безопасно сократить представление, но результат нужно проверять
удаление tEXt, zTXt, iTXt обычно убирает только комментарии
удаление iCCP, gAMA, sRGB может повлиять на отображение цвета
удаление или изменение tRNS может затронуть прозрачность
-fix зависит от конкретной ошибки файла

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

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

Оптимизация PNG-иконок для сайта

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

mkdir optimizedpngcrush -reduce -brute -d optimized *.png

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

Подготовка скриншотов для документации

PNG-скриншоты могут быть тяжёлыми, особенно если они сняты с большим разрешением. Pngcrush не уменьшает физический размер скриншота, но может сократить файл за счёт recompression:

pngcrush screenshot.png screenshot-optimized.png

Если скриншотов много:

mkdir optimizedpngcrush -d optimized *.png

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

Очистка PNG от текстовых комментариев

Если файл содержит ненужные текстовые chunks, их можно удалить:

pngcrush -rem text input.png output.png

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

Финальная подготовка ассетов перед релизом

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

mkdir release-pngpngcrush -reduce -brute -d release-png *.png

После этого стоит проверить результат, сравнить размеры и заменить исходные файлы только там, где это действительно даёт выигрыш.

Проверка старых PNG из архива

Для старых изображений, полученных из разных источников, полезен подробный просмотр:

pngcrush -n -v old-image.png

Если файл читается с предупреждениями, можно попробовать:

pngcrush -fix old-image.png old-image-fixed.png

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

Ограничения Pngcrush

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

Второе ограничение — работа именно с PNG. Pngcrush не является универсальным конвертером изображений. Она не предназначена для JPEG, WebP, AVIF, HEIC, TIFF или SVG. Если нужно конвертировать PNG в WebP или AVIF, потребуется другой инструмент.

Третье ограничение — скорость в тяжёлых режимах. -brute может быть долгим, особенно на больших изображениях. Это не ошибка, а следствие метода: программа перебирает варианты, а не просто нажимает один быстрый пресет.

Четвёртое ограничение — необходимость контроля при удалении chunks. Параметр -rem может быть полезным, но он же может убрать важные сведения. Для веб-иконок это часто нормально, для логотипов и изображений с управлением цветом — не всегда.

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

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

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

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

Программа Тип Главное отличие от Pngcrush
Pngcrush CLI PNG optimizer Глубокая работа с PNG chunks, IDAT recompression, -rem, -reduce, -brute
OptiPNG CLI PNG optimizer Более простой повседневный вариант, также делает integrity checks и умеет конвертировать некоторые форматы в PNG
Oxipng CLI PNG/APNG optimizer Современная многопоточная утилита на Rust, удобна для быстрых массовых прогонов
PNGOUT CLI PNG optimizer Может давать очень плотное сжатие, но требует более ручного подбора параметров
ZopfliPNG / zopflipng CLI PNG optimizer Использует Zopfli Deflate, часто работает медленнее, но может сильно сжимать финальные веб-ассеты
ImageOptim GUI для macOS Удобен для drag-and-drop и использует несколько оптимизаторов под капотом
FileOptimizer GUI для Windows Массово оптимизирует разные типы файлов, удобен пользователям без желания писать команды

Pngcrush и OptiPNG

OptiPNG — один из ближайших аналогов Pngcrush. Он тоже работает из командной строки и тоже выполняет lossless PNG optimization. В типовом сценарии OptiPNG часто проще: пользователь запускает команду с уровнем оптимизации, а программа сама делает recompression и проверки.

Pngcrush сильнее там, где нужно точечно управлять chunks. Например, удалить tEXt, сохранить или убрать определённый ancillary chunk, добавить текстовый chunk, заменить гамму, проверить поведение -reduce, использовать -n -v для просмотра информации. OptiPNG удобен как быстрый оптимизатор, Pngcrush — как более точный инструмент для PNG.

Для пользователя, которому нужно просто уменьшить папку PNG, OptiPNG может показаться дружелюбнее. Для пользователя, который работает с внутренним устройством PNG, Pngcrush даёт больше явного контроля.

Pngcrush и Oxipng

Oxipng — современный PNG optimizer, написанный на Rust. Его важное практическое преимущество — многопоточность. Если нужно быстро обработать много PNG-файлов, Oxipng часто удобнее для регулярного batch processing.

Pngcrush выглядит более старомодно, но остаётся полезным за счёт подробной работы с chunks и понятного диагностического вывода. В нём удобно видеть методы, IDAT length и итоговый выбор. Для одного файла или для технической проверки PNG это преимущество.

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

Pngcrush и PNGOUT

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

Если задача — выжать максимум из нескольких финальных PNG, PNGOUT может быть интересен как дополнительный инструмент после Pngcrush или вместо него. Если задача — управлять chunks, удалять metadata, вставлять tEXt, работать с gAMA и tRNS, Pngcrush удобнее.

В практическом рабочем процессе оба инструмента могут использоваться последовательно. Например, сначала Pngcrush для очистки и структурной подготовки, затем PNGOUT для дополнительной попытки уменьшить IDAT. Но для большинства пользователей достаточно выбрать один инструмент под свой стиль работы.

Pngcrush и ZopfliPNG

ZopfliPNG, или zopflipng, использует Zopfli Deflate. Главная идея — получить более плотное Deflate-сжатие ценой времени. Такой инструмент уместен для финальных ассетов сайта, где файл будет долго использоваться в публичной версии, а время однократного сжатия не критично.

Pngcrush обычно воспринимается как более классический PNG optimizer: он перебирает фильтры, zlib levels, стратегии, работает с chunks и даёт понятный отчёт. ZopfliPNG часто интереснее именно как финальный дожим файла.

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

Pngcrush и ImageOptim

ImageOptim — другой тип программы. Это графическая оболочка для macOS, куда пользователь перетаскивает изображения мышью. Под капотом могут использоваться разные оптимизаторы. Для дизайнера, контент-менеджера или пользователя без опыта терминала ImageOptim гораздо удобнее.

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

Если нужно быстро оптимизировать несколько PNG вручную, ImageOptim проще. Если нужно встроить оптимизацию в скрипт, контролировать параметры и хранить команду в документации проекта, Pngcrush практичнее.

Pngcrush и FileOptimizer

FileOptimizer — Windows-программа для массовой оптимизации разных типов файлов. Её преимущество — широкий охват форматов и графический интерфейс. Пользователь добавляет файлы, запускает обработку и получает результат без ручного ввода параметров.

Pngcrush работает уже: только PNG и только командная строка. Зато он даёт более прямой контроль над PNG-структурой. Если нужно сжать разные файлы — PDF, JPEG, PNG, ZIP, офисные документы — FileOptimizer удобнее. Если задача строго про PNG, особенно с удалением chunks и диагностикой, Pngcrush остаётся точнее.

Pngcrush против онлайн-компрессоров

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

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

Кроме того, онлайн-компрессор часто использует смешанные методы: lossless, lossy, quantization, изменение палитры, удаление metadata. Пользователь не всегда видит, что именно произошло. В Pngcrush всё задаётся явно: если нужна только recompression — запускается базовая команда; если нужно удалить текстовые chunks — используется -rem text; если нужен более тяжёлый перебор — добавляется -brute.

Онлайн-сервис выигрывает по простоте. Pngcrush выигрывает по контролю, приватности и воспроизводимости.

Безопасность и приватность

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

При этом Pngcrush не является программой защиты данных. Она не шифрует файлы, не удаляет секреты из самой картинки и не проверяет изображение на конфиденциальную информацию. Если на скриншоте видны пароли, токены, адреса, персональные данные или внутренние URL, Pngcrush их не скроет. Она может удалить текстовые metadata chunks, но не уберёт текст, который нарисован внутри пикселей.

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

  1. Сначала проверить само изображение визуально.

  2. Убрать или замазать чувствительные данные в редакторе.

  3. Сохранить чистую версию.

  4. Потом прогнать PNG через Pngcrush.

  5. При необходимости удалить metadata chunks через -rem.

Например:

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

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

Советы по использованию Pngcrush

Для первого запуска всегда лучше сохранять результат в отдельный файл:

pngcrush input.png output.png

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

Для папок с большим количеством PNG лучше использовать отдельный каталог:

mkdir crushedpngcrush -reduce -d crushed *.png

Это защищает исходники от случайной перезаписи и позволяет быстро удалить неудачный результат.

-brute стоит применять выборочно. Для маленьких иконок и финальных ассетов он полезен. Для временных скриншотов или сотен больших изображений он может быть слишком медленным.

Удаление chunks нужно делать осознанно. Безопасный старт — -rem text, потому что текстовые комментарии редко влияют на отображение. Агрессивные варианты вроде -rem alla лучше проверять на конкретной группе файлов.

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

Для повторяемого процесса команду нужно сохранить. Например, в README.md проекта можно указать:

pngcrush -reduce -brute -d optimized assets/*.png

Тогда другой участник проекта сможет выполнить тот же процесс.

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

Частые ошибки при работе с Pngcrush

Одна из самых частых ошибок — запуск команды не из той папки. Пользователь вводит:

pngcrush image.png image-crushed.png

а терминал отвечает, что файл не найден. Нужно проверить текущий каталог командой pwd на Linux/macOS или cd на Windows. Также можно указать полный путь к файлу.

Вторая ошибка — попытка использовать одинаковое имя входного и выходного файла без -ow:

pngcrush image.png image.png

Так делать не нужно. Для перезаписи есть отдельный параметр:

pngcrush -ow image.png

Третья ошибка — чрезмерное использование -brute. Пользователь запускает тяжёлый режим на большой папке, ждёт слишком долго и считает программу зависшей. На самом деле Pngcrush просто перебирает методы. Для массовой регулярной обработки лучше сначала использовать более лёгкий режим.

Четвёртая ошибка — удаление всех chunks без проверки. Команда вроде:

pngcrush -rem alla input.png output.png

может быть нормальной для простых веб-ассетов, но для файлов с важной цветовой информацией её нужно применять осторожно.

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

Шестая ошибка — путаница между Pngcrush и lossy-компрессорами. Pngcrush не делает изображение хуже, но меньше в стиле сильного JPEG-сжатия. Если нужен радикально меньший размер с потерей части информации, нужно использовать другие инструменты, например pngquant или конвертацию в WebP/AVIF.

Примеры команд для разных задач

Задача Команда
Простая оптимизация одного PNG pngcrush input.png output.png
Оптимизация с попыткой сокращения структуры pngcrush -reduce input.png output.png
Максимальный перебор методов pngcrush -brute input.png output.png
-reduce вместе с -brute pngcrush -reduce -brute input.png output.png
Перезапись исходника pngcrush -ow input.png
Сохранение всех результатов в папку pngcrush -d crushed *.png
Новый суффикс для результата pngcrush -e _crushed.png input.png
Удаление текстовых chunks pngcrush -rem text input.png output.png
Удаление нескольких chunks pngcrush -rem tEXt -rem zTXt -rem iTXt input.png output.png
Подробный вывод pngcrush -v input.png output.png
Просмотр информации без записи файла pngcrush -n -v input.png
Попытка исправить проблемный PNG pngcrush -fix input.png fixed.png

Эти команды покрывают большую часть реальной работы с Pngcrush. Новичку не нужно сразу изучать все параметры. Достаточно начать с input.png output.png, затем добавить -reduce, после этого попробовать -brute, а уже потом переходить к -rem, -v, -fix и управлению chunks.

Как Pngcrush вписывается в рабочий процесс сайта

Для сайта Pngcrush лучше использовать не хаотично, а как этап подготовки изображений. Например, есть папка assets/png, где лежат исходные PNG. Перед публикацией пользователь создаёт папку assets/png-optimized и запускает:

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

После этого нужно проверить результат:

ls -lh assets/png assets/png-optimized

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

cp assets/png-optimized/*.png assets/png/git diff --stat

Для финальной версии можно запустить более тяжёлый режим:

pngcrush -reduce -brute -d assets/png-optimized assets/png/*.png

Такой процесс удобно документировать. В команде явно видно, что происходит: PNG обрабатываются локально, сохраняются отдельно, используется -reduce, а -brute применяется только там, где нужен максимальный результат.

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

Как читать отчёт Pngcrush

Отчёт Pngcrush кажется сложным только на первый взгляд. В нём есть несколько ключевых строк.

Recompressing input.png означает, что программа начала пересжатие файла.

Total length of data found in IDAT chunks показывает, сколько данных найдено в критических chunks, связанных с изображением.

IDAT length with method или Critical chunk length, method показывает размер результата при конкретном методе. Если включён -brute, таких строк будет много.

Best pngcrush method показывает метод, который дал лучший результат. Это одна из самых важных строк отчёта.

IDAT reduction показывает, насколько уменьшился IDAT-поток.

filesize reduction показывает общее уменьшение файла. Этот процент может отличаться от IDAT reduction, потому что в PNG есть не только IDAT, но и другие chunks.

CPU time показывает время, затраченное на decode, encode и прочие операции. По этой строке удобно оценивать, насколько тяжёлым был запуск.

Если в отчёте видно no IDAT change или минимальное уменьшение, это значит, что Pngcrush не нашёл более компактного варианта. В таком случае можно попробовать -brute, но гарантий большого выигрыша нет.

Кому подойдёт Pngcrush

Pngcrush хорошо подходит разработчикам, веб-мастерам, техническим авторам, администраторам, пользователям Linux/macOS/Windows, которые спокойно работают с командной строкой. Программа особенно полезна там, где нужна повторяемость: сегодня обработать одну папку, завтра новую, затем встроить команду в сборку.

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

Pngcrush не лучший выбор для тех, кто хочет перетащить картинку мышью, увидеть красивый интерфейс, сравнить превью и нажать большую кнопку Сжать. Для такого сценария удобнее ImageOptim, FileOptimizer или онлайн-сервисы.

Но если нужна точная командная утилита для PNG, Pngcrush остаётся сильным инструментом. Она делает одну задачу, но делает её глубоко: оптимизирует IDAT, управляет chunks, даёт режимы -reduce, -brute, -rem, -fix, -v, -d, -e, -ow и хорошо подходит для автоматизации.

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

Pngcrush — это не массовый пользовательский компрессор с красивым окном, а техническая программа для тех, кто хочет контролировать оптимизацию PNG. Её сильная сторона — работа на уровне структуры файла: IDAT datastream, PNG filters, zlib compression, ancillary chunks, gamma, transparency, textual chunks и режимы подробной диагностики.

Для простого уменьшения одного PNG достаточно команды:

pngcrush input.png output.png

Для более серьёзной оптимизации под сайт или приложение часто используют:

pngcrush -reduce -brute input.png output.png

Для удаления текстовых метаданных:

pngcrush -rem text input.png output.png

Для массовой обработки в отдельную папку:

pngcrush -reduce -d crushed *.png

Главные плюсы Pngcrush — локальная обработка, lossless-подход, точные параметры, пакетный запуск, работа с chunks и удобство для скриптов. Главные минусы — отсутствие графического интерфейса, необходимость понимать командную строку и возможная медлительность в режиме -brute.

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


Ваш адрес email не будет опубликован. Обязательные поля помечены *