Сжатие png-изображений с помощью pngcrush

Для сжатия png-изображений можно использовать библиотеку pngcrush. Основной задачей pngcrush является оптимизация (сжатие, уменьшение размера) png-изображений без потери качества.

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 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

 

 
 
 
 

icon Комментарии 0

Ваш комментарий к статье.. (для авторизованных)

ctrl+enter

icon Вход в систему

зарегистрироваться