Pngcrush
pngcrush — это бесплатная утилита, с открытым исходным кодом. Используется для оптимизации фильтров PNG изображений. Дает возможность снизить размер файла без потерь — это означает, что «crushed» картинки будут иметь качество исходного изображения.
pngcrush | |
---|---|
Тип | Оптимизатор изображений |
Автор | Glenn Randers-Pehrson |
Написана на | C |
Операционная система | Кроссплатформенное программное обеспечение |
Последняя версия | 1.7.12 (6.08.2010) |
Репозиторий | git.code.sf.net/p/pmt/co… |
Лицензия | Libpng License[d] |
Сайт | pmt.sourceforge.net/pngc… |
Главной целью 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-компрессоры:
- OptiPNG - форк pngcrush, иногда заметно превосходит исходный pngcrush
- PNGOUT
- AdvanceCOMP
- Image-Pngslimmer
Аналогичные программы для JPG:
ПримечанияПравить
- ↑ Cosmin Truta. A guide to PNG optimization (неопр.) (недоступная ссылка — история) (10 мая 2008). Дата обращения: 31 июля 2010. Архивировано 1 июля 2012 года.
- ↑ 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