Pngcrush

pngcrush
Скриншот программы pngcrush
Тип Оптимизатор изображений
Автор Glenn Randers-Pehrson
Написана на C
Операционная система Кроссплатформенное программное обеспечение
Последняя версия 1.8.13 (29.08.2017)
Репозиторий git.code.sf.net/p/pmt/co…
Лицензия Libpng License[вд]
Сайт pmt.sourceforge.net/pngc…
Логотип Викисклада Медиафайлы на Викискладе

pngcrush — бесплатная утилита, с открытым исходным кодом. Используется для оптимизации фильтров PNG изображений. Дает возможность снизить размер файла без потерь — это означает, что «crushed» картинки будут иметь качество исходного изображения.

Главной целью pngcrush является уменьшение размера PNG с помощью потока данных IDAT, посредством комбинации методов сжатия и дельта-фильтров. Однако, pngcrush может также использоваться для других действий с изображениями формата PNG, к примеру, изменение глубины изображения или удаление нежелательных вспомогательных блоков, добавление определенных блоков, включая gAMA, tRNS, iCCP и текстовый блок.

Основные операции

[править | править код]

Основное использование pngcrush заключается в уменьшении размера включенных в изображение данных секции IDAT.

Данные о пикселях в файле PNG сжимаются с использованием алгоритма LZ77 (который находит повторяющиеся последовательности байтов в исходном файле), после которого сжимается алгоритмом Хаффмана. Эта комбинация напоминает нам алгоритм DEFLATE. Перед сжатием к пиксельным данным применяется безопасный дельта-фильтр.

Существует 5 возможных типов фильтра, которые могут быть использованы отдельно на каждом шаге сканирования. В принципе, есть несколько возможных путей поиска совпадений LZ77. Таким образом, существует огромное множество различных комбинаций того, как может быть сжато изображение. Которая из них будет сжимать лучше, зависит от свойств самого изображения[2]

pngcrush сжимает изображение несколькоми различными комбинациями, а потом сохраняет наименьший из полученных файлов[3] Так как не представляется возможным осуществить все возможные комбинации, pngcrush использует некоторые эвристики для выбора пути.

В простейшем случае pngcrush может быть вызван создать «crushed» файл из неоптимизированного, используя следующий формат, с помощью команды:

pngcrush imageIn.png imageOut.png 

По умолчанию pngcrush использует лишь несколько общих методов сжатия файла. Необязательный «-brute» метод сжатия может быть использован для brute force сжатия, который может использовать более 100 разных методов сжатия.

Сокращение размера файла через удаление данных о цвете

[править | править код]

Одной из особенностей pngcrush является способность удалять все данные о коррекции цвета (гамма, баланс белого, цветовой профиль ICC, стандартный профиль RGB) из PNG-файла, используя следующие команды:

pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB InputFile.png OutputFile.png 

Большинство графического программного обеспечения вставляет дополнительные данные о коррекциях цвета, которые обычно не нужны. Удаление же приведет к 40%-му сокращению размера исходного файла. Pngcrush может без потерь качества уменьшать битовую глубину изображения или применять цветовую палитру в случае, если это приведет к сжатию размера.

Все вспомогательные блоки и текст могут быть удалены с помощью команды:

pngcrush -rem gAMA -rem alla -rem text InputFile.png OutputFile.png 

Изменение изображения

[править | править код]

Pngcrush может быть использовано для кодирования цвета изображения. Если используется 10 цветов, но цветовая палитра состоит из 256 (8 бит), pngcrush сможет преобразовать палитру в 4-битовую и урезать её до 10 цветов:

pngcrush -bit_depth 4 -plte_len 10 image1.png image2.png 

Также pngcrush может быть использована для изменения цветности. Для изображения true-color, изменение цветности с 2 до 0 (-c 0) изменит его на черно-белое (оттенки серого). Такое изображение значительно меньше исходного, так как, в дополнение к Альфа-каналу, только один 8-битовый канал используется на пиксель, а не три. Черно-белое изображение намного меньше также и потому, что не требует цветовой палитры. Для полноцветных же изображений изменение типа цвета с 6 до 2 удалит альфа-канал.

Манипуляции с метаданными и блоками

[править | править код]

Изображения PNG содержат блоки с информацией об изображении, такие, как разрешение (физический блок), дата последнего изменения (блок tIME) и текстовые метаданные (текстовый блок и его варианты). Используя pngcrush, пользователь может редактировать или удалять эти вспомогательные блоки:

pngcrush -res 96 -rem time -text b "Software" "pngcrush" image1.png image2.png 

Эта команда изменяет разрешение до 96 dpi, удаляя временные метки, и свойство «создатель изображения» на «pngcrush».

Похожие PNG-компрессоры:

Аналогичные программы для JPG:

Примечания

[править | править код]
  1. 1 2 https://pmt.sourceforge.io/pngcrush/
  2. Cosmin Truta. A guide to PNG optimization (10 мая 2008). Дата обращения: 31 июля 2010. Архивировано из оригинала 1 июля 2012 года.
  3. Whedon, David man pngcrush. Дата обращения: 31 июля 2010. Архивировано из оригинала 1 июля 2012 года.
  • Steve Souders, Even Faster Web Sites: Essential Knowledge for Frontend Engineers, O’Reilly Media, 2009, ISBN 0-596-52230-4, p. 142
  • Khalid Sayood, Lossless compression handbook, Academic Press, 2003, ISBN 0-12-620861-1, pp. 386–388