tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

TinyPNGで使われているpngquant入れてpng圧縮してみるメモ - for centos

はじめに

ちょっと使いたい要件があったのでpngquant入れてpng圧縮してみるメモ

アジェンダ

  1. pngquantとは
  2. いれてみる
  3. つかってみる 

1. pngquantとは

これは参考サイトまんま引用させていただきます

png形式の画像ファイルを圧縮するためのコマンドラインから使用するツールです。
圧縮の方法としては24/32-bitのフルカラーのpngファイルを256色以下に減色し8-bitのインデックスカラーに変換することで圧縮を行います。
参考:pngquantでPNG圧縮

2. いれてみる

入れた環境
$ cat /etc/redhat-release 
CentOS release 6.6 (Final)
いれる
$ cd /usr/local/src/

$ sudo git clone git://github.com/pornel/pngquant.git

$ sudo make

$ sudo make install

※ 一応はいったことを確認
$ pngquant --version
2.4.1 (April 2015)
makeでエラーの場合

下記のようなエラーが出たらメッセージに書いてある通り素直にlibpngを入れます。

$ sudo make
./configure

  Compiler: gcc
     Debug: no
       SSE: yes
    OpenMP: no
    libpng: error ... not found (try: `apt-get install libpng-dev` or `yum install libpng-devel`)

make: *** `pngquant.o' に必要なターゲット `config.mk' を make するルールがありません.  中止.

$ yum install libpng-devel

※ これでmakeが通る
$ sudo make

3. つかってみる 

まずは適当に画像を落としてきて圧縮してみます。
落とした画像はこれですね。octcat。 f:id:tweeeety:20150519193836p:plain

普通につかってみる
※ /tmpにoctcatのpng画像をとってきてみる
$ wget https://octodex.github.com/images/original.png -P /tmp

$ cd /tmp

※ 圧縮前に容量を確認
$ ls -lh 
-rw-rw-r-- 1 hoge hoge 50K  4月 30 08:11 2015 original.png

※ 圧縮してみる
$ pngquant original.png 

※ 圧縮後に容量を確認
$ ls -lh
-rw-rw-r-- 1 hoge hoge 20K  5月 19 19:19 2015 original-fs8.png
-rw-rw-r-- 1 hoge hoge 50K  4月 30 08:11 2015 original.png

特に指定しないとデフォルトでファイル名に-fs8がつきます

ファイル名を変えずに圧縮

ファイル名を変えずに圧縮するには--extオプションと--forceオプションを指定します

※ 圧縮前に容量を確認
$ ls -lh
-rw-rw-r-- 1 hoge hoge 50K  4月 30 08:11 2015 original.png

※ ファイル名を変えずに圧縮
$ pngquant --ext .png --force original.png

※ 圧縮後に容量を確認
$ ls -lh
-rw-rw-r-- 1 hoge hoge 20K  5月 19 19:31 2015 original.png
一括指定
※ ワイルドカード(*)で指定
$ pngquant --ext .png --force *.png

または

※ スペースで区切って指定
$ pngquant --ext .png --force original1.png original2.png original3.png

※ もちろんディレクトリで指定も可能
$ pngquant --ext .png --force /tmp/img/*.png
png以外を指定するとエラー

補足ですがそのままpng以外を指定するとエラーになります

$ pngquant original.jpg 
  error: Not a PNG file (libpng failed)
  error: cannot decode image original.jpg

おわり

入れるのも使うのもかなり簡単なので、自前でスクリプト書いたりgruntと組み合わせるのも簡単そうです\(^o^)/