Сжатие картинок
Вчера попробовал натравить инструменты для оптимизации картинок на свой каталог с картинками этого блога. Результат следующий: выигрыш составил около 10 процентов (больше всего у меня JPEG-файлов). Немного, но и не мало в некоторых ситуациях. Я использовал только утилиты для командной строки.
PNG. Для сжатия PNG использовался известнейший pngcrush. Интересен в режиме «brute force» (перебора), где перебираются комбинации фильтров (фильтры — это специализированные методы сжатия, например, для градиента и т. д.). Я запускал сделующим образом: «pngcrush -brute -fix -e .png1 *.png». В итоге, все файлы png у меня в папке получают свою оптимизированную копию с расширением png1. Есть опасный момент — если у вас есть файлы APNG, pngcrush их превратит в файл без анимации. Экономия получилась порядка 7%.
JPEG. В JPEG’e особо оптимизировать нечего, формат сжатия с потерями, поэтому оптимизацию без участия человека не произвести — трудно просчитать насколько критично изменился рисунок. Оптимизировать тут нечего, но можно убрать мусор — многие программы записывают в файл комментарии, лишнюю информацию. Я использовал для чистки PureJPEG, после него прошёлся своим Photoshop Crap Remover, чтобы дочистить файл. Формат запуска PureJPEG следующий: «dir /B /S /A-D *.jpg | purejpeg», в итоге все файлы с расширением jpg будут вычищены. Моя утилита написана на PHP, так что я даже не буду упоминать как её запустить — кому надо разберётся, остальным объяснить очень трудно. Экономия — около 10%.
GIF. Несмотря на то, что утилите GIFLite уже около 12 лет, мне она кажется лидером по переупаковке GIF. Утилита написана White River Software, её разработка начата ещё в 1992 году и она рабоатет под DOS, т. е. должна запускаться даже в Linux из-под какого-нибудь DOSEmu. Утилита платная, но кому платить уже непонятно — никаких координат этой фирмы в сети нет. Поэтому ищем любой ключ, запускаем giflite с ключём /R и «регистрируемся».
Запускать её сложнее, чем предыдущие — в 1992-м году длинных имён не было, да и перебирать свои методы она не умеет. Поэтому я написал небольшую batch-программу. Она проходит по всем GIF-файлам в папке, применяет на каждый один из четырёх методов (видимо выбирается какая-то стратегия для выбора словаря в LZW-сжатии), после чего выбирает файл с наименьшим размером. Экономия составила около 8%.
@ECHO OFF
REM Написал Евгений «BOLK» Степанищев. 2007.
MKDIR GIFLITE.$$$ 2>nul
REM Основной цикл обработки файлов GIF
FOR /R %%N IN (*.gif) DO @CALL :method %%N
REM Удаляем весь мусор, который мог остаться
DEL /Q giflite.tmp 2>nul
RMDIR /S /Q GIFLITE.$$$
EXIT
:method
REM Перебираем методы
FOR %%M IN (0 1 2 3) DO @CALL :giflite %%M %%~s1 %1
REM Сортируем полученное по размеру и забираем последний (наименьший) файл
FOR /F "usebackq skip=3" %%R IN (`DIR /B /O-S GIFLITE.$$$`) DO @CALL :getresult %%R %1
GOTO :EOF
:getresult
REM Переписываем файл на место прежнего, удаляем мусор
MOVE /Y GIFLITE.$$$%1 %2
DEL /Q GIFLITE.$$$*.*
GOTO :EOF
:giflite
REM Запускаем преобразование
GIFLITE.EXE -t -h -m%1 -o %2 GIFLITE.$$$%1 >nul 2>nul
Есть ещё optipng. Давно пользуюсь им вместо pngcrush.
Делает то же самое, только параметры так: optipng -full filename.png (то есть, пишет оптимизированную версию в тот же файл).
Не знаю, есть ли для Win32.
А вот PureJPEG хочу найти под Linux.
Под Linux возьми мой PCR, там же PHP запускается, а делают они примерно то же самое. OptiPNG — fork от pngcrush, надо его посмотреть, версия для Windows есть.
Оказывается, даже форк. Посмотрю.
Тьфу :) «Даже не форк» конечно же :)
Да, смотрю оно как-то покруче работает, по крайней мере, на трёх файлах, что я ему скормил. Но ключ не -full, а -o7.
а как же pngout?
А чем оно лучше аналогов?
Сравнение программа сжатия PNG:
http://www.twilightuniverse.com/articles/2003/09/ping/
А тут вообще предлагают пользоваться сразу двумя:
http://cssing.org.ua/2004/08/14/pngcrush-pngout/
как минимум, есть ещё jpeg2000 и jpeg-progressive… а на самом деле встречаются и вариации кодировщиков дающие несколько разное качество сжатия на выходе
JPEG2000 не показывается ни одним браузером, кроме тех, что на движке WebCore >= 412 (т. е. Safari, например). Так что его нет.
Кроме того, если взять сжатие с потерями и сжать снова, то получим новые потери.
http://bolk.exler.ru/files/pcr.zip
404 Not Found