スマートフォンアプリを作っていると、偉い人から「アプリの容量でかいよー、小さくしてー」なんて言われちゃったりしてさてどうしようかということになることがしばしばあります。
そんなときはまず使っていない画像や動画等のリソースを削除するのはもちろん、コンパイルの最適化オプションを上げてみたりしてなんとかがんばるのですが、努力にも限度があります。
なんで、PNG画像を再圧縮することで容量を小さくしてみるのが良いでしょう。
デザイナーがPhothoshopで作ったPNGファイルをアプリにそのまま組み込んでいる場合は、PNG画像を再圧縮することでサイズを小さくすることが期待できます。
PNGの最適化ツール
PNGの最適化ツールには、可逆圧縮のPngcrushやOptiPNG、非可逆圧縮のpngquantといったものがあります。
その中で高い圧縮率を誇るzopflipngを使ってみます。
zopfli とは
zopfliは2013年にGoogle社が発表した新しい圧縮アルゴリズムです。
PNGに使われていたdeflateという圧縮アルゴリズムよりも数%の改善を見込めるアルゴリズムですが、圧縮にむっちゃ時間がかかります。
zopfliはdeflate互換なので、zopfliで圧縮したPNGも従来のPNGビューアで表示できます。
インストール (Mac)
HomeBrewからインストールできます。
brew install zopfli
使ってみる
基本的な使い方
zopflipng input.png output.png
上書きする
zopflipng -y input.png input.png
-y
オプションは上書き時に問い合わせしなくなるだけなので、なくてもかまいません。
もっと圧縮する
zopflipng -m input.png output.png
-m
オプションを指定すると、圧縮率が高くなります。かわりに圧縮に時間がかかります。
とりあえずディレクトリ以下にあるPNGファイルを全部圧縮してみる (Mac/Unix)
find your/image/directory -iname "*.png" -exec zopflipng -m -y '{}' '{}' \;
結果例
あるiOSアプリの3MBにおよぶPNG画像群に対してzopflipngで圧縮したところ、PNG画像のサイズがおよそ 30%減 になりました。
OptiPNGの -o 7
オプションで圧縮した際にはおよそ 10%減 だったのに比べるとzopflipngが優秀なのがわかります。
Photoshopで作ったPNG画像をそのまま使っている場合には効果が高そうです。