Для сжатия png-изображений можно использовать библиотеку pngcrush. Основной задачей pngcrush является оптимизация (сжатие, уменьшение размера) png-изображений без потери качества.
Установка pngcrush:
sudo apt-get install pngcrush
Выполняет сжатие без потерь. То есть без ухудшения качества.
Использование pngcrush из консоли linux:
pngcrush source.png output.png
- source.png - указываем путь до png-картинки, которую нужно ужать
- output.png - путь до новой ужатой картинки
Либо вместе с опцией -q
(quite, тихо) - без вывода в консоль какой-либо информации:
pngcrush -q source.png output.png
По моим испытаниям, использование pngcrush даёт уменьшение размера изображений на 3-40%.
$ pngcrush source.png output.png | pngcrush 1.7.9 | Copyright (C) 1998-2002,2006-2010 Glenn Randers-Pehrson | Copyright (C) 2005 Greg Roelofs | This is a free, open-source program. Permission is irrevocably | granted to everyone to use this version of pngcrush without | payment of any fee. | Executable name is pngcrush | It was built with libpng version 1.2.43, and is | running with libpng version 1.2.49 - March 29, 2012 | Copyright (C) 1998-2004,2006-2010 Glenn Randers-Pehrson, | Copyright (C) 1996, 1997 Andreas Dilger, | Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc., | and zlib version 1.2.3.4, Copyright (C) 1998-2002 (or later), | Jean-loup Gailly and Mark Adler. || Warning: versions are different between png.h and png.c || png.h version: 1.2.43 || png.c version: 1.2.49 | It was compiled with gcc version 4.4.3 and gas version 2.9.5(?). Recompressing source.png Total length of data found in IDAT chunks = 289485 unknown chunk handling done. IDAT length with method 1 (fm 0 zl 4 zs 0) = 300934 IDAT length with method 2 (fm 1 zl 4 zs 0) = 314283 IDAT length with method 3 (fm 5 zl 4 zs 1) = 301205 IDAT length with method 4 (fm 0 zl 9 zs 1) = 288095 IDAT length with method 7 (fm 0 zl 9 zs 0) = 276839 Best pngcrush method = 7 (fm 0 zl 9 zs 0) for output.png (4.37% IDAT reduction) (4.51% filesize reduction) CPU time used = 0.640 seconds (decoding 0.080, encoding 0.560, other 0.000 seconds)
Если картинку обрезать с помощью imagick, то на уменьшенную картинку можно снова применять pngcrush и размер изображения уменьшится.
Если pngcrush не может ужать вашу картинку или ужимает не более чем на 1% - это значит, что ваша картинка уже оптимизированная. В таком случае может помочь только сжатие с потерями. Для этого нужно смотреть в сторону других библиотек.
Pngcrush использует несколько общих методов сжатия, которые заключаются в удалении избыточности из изображения. Затем pngcrush сохраняет файл наименьшего размера. Различные библиотеки (даже gd2 и imagick) могут добавлять избыточную информацию, которая при просмотре изображения не играет никакой роли (коррекции цвета, гамма, баланс белого, битовая глубина). Удаление избыточной информации позволяет ужать размер изображения без ущерба для его качества.
Также имеется параметр -brute
- что значит brute force. Т.е. это метод грубого перебора. Используется более 100 различных методов сжатия для получения максимальной компрессии. Параметр -brute
значительно увеличивает временные затраты. Но, по моим испытаниям, выигрыш в размере изображения незначительный - 1-3%.
Команда, чтобы ужать все png-картинки в текущей папке:
for file in *.png ; do pngcrush "$file" "${file%.png}-reduced.png"; done
Данная команда создаст новые уменьшенные картинки с постфиксом "-reduced". Доработаем команду, чтобы старые картинки сразу же заменялись на новые сжатые картинки:
for file in *.png ; do pngcrush "$file" "${file%.png}-reduced.png" && mv "${file%.png}-reduced.png" "$file" ; done
Комментарии 0