Введение
Командный оптимизатор PNG
pngcrush — это бесплатная программа с открытым исходным кодом для оптимизации файлов изображений PNG. Она уменьшает размер файла без потерь качества, то есть полученное "сжатое" изображение будет иметь такое же качество, как и исходное. Основная цель pngcrush — уменьшить размер потока данных PNG IDAT, перебирая различные комбинации методов сжатия и дельта-фильтров. Также его можно использовать для различных манипуляций с изображениями PNG, таких как изменение глубины цвета, удаление нежелательных дополнительных блоков или добавление определенных блоков, включая gAMA, tRNS, iCCP и текстовые блоки.
Основная операция
Основное назначение pngcrush — уменьшение размера данных изображения, содержащихся в разделе IDAT. Данные пикселей в файле PNG сжимаются с помощью алгоритма LZ77 (который пытается найти повторяющиеся последовательности байтов в исходных данных), а затем дополнительно сжимаются алгоритмом Хаффмана. Эта комбинация называется сжатием Deflate. Перед сжатием к данным пикселей применяются неразрушающие дельта-фильтры. Существует пять возможных типов фильтров, которые можно указать отдельно для каждой строки сканирования, и несколько возможных стратегий поиска совпадений LZ77. Таким образом, существует огромное количество различных комбинаций сжатия изображения. Какая комбинация обеспечит наилучшее сжатие, зависит от характеристик конкретного изображения. pngcrush сжимает изображение, используя множество различных комбинаций, а затем сохраняет самый маленький из полученных файлов. Поскольку перебрать все комбинации невозможно, pngcrush использует эвристические методы для выбора методов, которые следует попробовать. По умолчанию pngcrush использует лишь несколько распространенных методов для сжатия файла. Необязательный аргумент "brute" позволяет выполнить принудительное сжатие, которое будет использовать 176 различных методов сжатия в версии 1.8.12 и более поздних версиях или 148 методов сжатия в версиях 1.7.45–1.8.11.
Уменьшение размера файла путем удаления данных о цветовой коррекции
Одной из особенностей pngcrush является возможность удалять все данные о коррекции цвета (гамма, баланс белого, ICC цветовой профиль, стандартный RGB цветовой профиль) из PNG-файлов. Поскольку большинство графических программ встраивают избыточные данные о цветовой коррекции, которые обычно не требуются, их удаление может уменьшить размер файла до 40% по сравнению с исходным. При необходимости pngcrush также может без потерь уменьшить битовую глубину изображений или применить цветовую палитру, если это приведет к уменьшению размера файла. Можно удалять все дополнительные и текстовые чанки.
Манипуляция изображения
pngcrush можно использовать для изменения цветового кодирования изображения. Например, если изображение содержит 10 цветов, но имеет цветовую палитру из 256 записей (8 бит), pngcrush можно использовать для уменьшения цветовой палитры до 4 бит и усечения палитры до 10 записей. pngcrush также может изменить цветовой тип изображения. Для истинноцветного изображения изменение цветового типа с 2 на 0 преобразует его в оттенки серого. Изображения в оттенках серого обычно меньше, чем истинноцветные изображения, потому что, помимо необязательного альфа-канала, на пиксель используется только один 8-битный канал вместо трех. Изображения в оттенках серого также обычно меньше, чем палитровые изображения, поскольку им не требуется определять цветовую палитру. Для истинноцветного изображения с альфа-каналом изменение цветового типа с 6 на 2 удаляет альфа-канал.
Манипуляция фрагментами и метаданными
Изображения PNG содержат чанки с информацией об изображении, такие как его разрешение (чанк phys), время последнего изменения (чанк tIME) и текстовые метаданные (чанк text и его варианты). С помощью pngcrush пользователь может редактировать или удалять эти дополнительные чанки.