Оптимизация файлов изображений с целью уменьшения их размеров без потери качества никогда не бывает лишней. Особенно уместна такая оптимизация при разработке приложений для мобильных устройств, веб-приложений или интернет-сайтов. Для уменьшения размеров png-файлов существует хорошая бесплатная консольная утилита - PNGOUT. Она пережимает данные, содержащиеся в IDAT-пакете (в этом пакете содержатся собственно данные о всех пикселах изображения), может автоматически уменьшать глубину цвета там, где это нужно и удалять из файла пакеты, в которых нет необходимости.
Автор утилиты написал собственный упаковщик DEFLATE, который работает медленее, чем аналоги, но жмет данные на 5-10% лучше. Соответственно, в результате обработки файлов PNGOUT их размер уменьшается на 5-10%, хотя, бывали случаи, когда для некоторых файлов размер после обработки уменьшался до 5-10% от первоначального (не знаю, в чем эти файлы были сохранены, видимо, столь высокая степень компрессии была достигнута удалением лишних пакетов данных). Утилита PNGOUT консольная, выполняется из командной строки и обрабатывает один файл за запуск. Также, автором PNGOUT написан вариант программы с GUI - PNGOUTWin, которая умеет обрабатывать файлы в пакетном режиме и за нее уже автор просит некоторого количества зеленых денег. Кроме того, существует еще бесплатная оболочка с аналогичным функционалом требующая .NET для своей работы.
На мой взгляд, при автоматизированной сборке/оптимизации контента все же удобнее пользоваться консолью и командными файлами, для чего я написал небольшой python-скрипт, позволяющий обрабатывать сразу все файлы начиная с некоторой директории (работа скрипта проверялась в Linux и в Windows).
Синтаксис вызова команды следующий:
В Linux:
pngout-dir.py <source directory> [<output directory>]
В Windows:
python pngout-dir.py <source directory> [<output directory>]
Где обязательный параметр source directory определяет путь к каталогу, все файлы которого будут сжаты. Второй параметр output directory необязателен, и если он указан, то определяет директорию, куда будут сохранены оптимизированные файлы.
Т.е., команда
pngout-dir.py some_dir
пройдется по всем файлам и вложенным каталогам директориии some_dir,оптимизирует их (если сможет) и перезапишет.
Команда
pngout-dir.py some_dir out_dir
пройдется по всем файлам и вложенным каталогам директориии some_dir, и запишет их оптимизированный вариант в каталог out_dir. Если в some_dir содержались вложенные поддиректории с png-файлами, то вся их структура будет воспроизведена.
Скрипт можно скачать по ссылке ниже. Утилиту PNGOUT для Windows можно скачать тут, её порт для Linux - тут. Среда Python живёт здесь.
Файлы:
pngout-dir.zip