Pngcrush

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
pngcrush
Pngcrush.png
Тип

Оптимизатор изображений

Автор

Glenn Randers-Pehrson

Написана на

C

Операционная система

Кроссплатформенное программное обеспечение

Последняя версия

1.7.12 (6.08.2010)

Сайт

pmt.sourceforge.net/pngcrush/

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

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

Основные операции[править | править исходный текст]

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

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

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

pngcrush сжимает изображение несколькоми различными комбинациями, а потом сохраняет наименьший из полученных файлов[2] Так как не представляется возможным осуществить все возможные комбинации, 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:

Примечания[править | править исходный текст]

  • 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

Ссылки[править | править исходный текст]