画像サイズ縮小化ツールOptiPNG 0.7.5--ソースからビルド

2014年3月24日にOptiPNGのバージョン0.7.5がリリースされていた。PNGファイルなどの最小化、最適化で必ず使う(使いたい)ツールがOptiPNGである。Debian環境だとパッケージが古く、その効率に問題があるので、ソースからビルドしている。

PNGファイルはさまざまな画像編集ツールで作成できるが、その出力サイズはツールによって異なる。画像データとは関係のないメタデータも含まれているということもあるが、緩い圧縮方法で圧縮されていた場合、軽く2倍はサイズが異なってしまう。

そこでPNGファイルの作成は使いやすい任意のツールで行い、仕上げにOptiPNGを使うというスタイルが無難なところだろう。Linux OSのパッケージにはたいてい含まれていると思うが、残念ながらDebianの場合はバージョン0.6系のままだ。バージョン7以降でメタデータを削除できる機能が加わっているため、その効率に明確な違いがでてしまう。

ということで、OptiPNGはソースからビルドしてバイナリ作っている。比較的ライブラリインクルードなツールなので(libpng、zlibを同梱)、一度作っておけば、そのほかのマシンにはそのバイナリをコピーして~/binなどに置いておいて使うということもできる。

バージョン0.7.5出の変更点はhistoryを見ると以下のとおり。

Version 0.7.5   24-mar-2014
-------------
 * Upgraded libpng to version 1.6.10-optipng.
 * Upgraded zlib to version 1.2.8-optipng.
 ! Fixed various build issues with libpng-1.5 and libpng-1.6.
   (Thanks in part to Oliver Schneider for the contribution.)
 * Allowed the handling of huge image files (> millions of pixels
   per row or column) to be independent of the libpng version.
 + Allowed the option -preserve to save the file ownership (UID/GID)
   on Unix.  (Thanks to Otto Kekäläinen for the suggestion.)
 ! Fixed a build issue with Clang.
 + Added various enhancements to the configure script.

ビルド関連のバグを直したことと、100万ピクセル以上の塊を分けずに扱えるようになったということのようだ。最後のエンハンスメントが気になるが詳細は確認していない。総じて大きな画像を扱う際の効率が良くなったのだろうと予想する。

DebianでのOptiPNGのビルド

Debian上でのビルド手順を以下でまとめてみた。ちょうど1台サーバーを稼働させる件があったので、そこで0から実行してみた。

# aptitude install build-essential
# aptitude build-dep optipng
# tar zxvf optipng-0.7.5.tar.gz
# cd optipng-0.7.5
# ./configure
# make
(ここで通常はmake testを実行するが、このバージョンに同梱されているlibpngだとtestが実行できないビルドがされるようなのでパス)
# cp src/optipng/optipng ~/bin
# ~/bin/optipng -v
~/bin/optipng -v
OptiPNG version 0.7.5
Copyright (C) 2001-2014 Cosmin Truta and the Contributing Authors.

This program is open-source software. See LICENSE for more details.

Portions of this software are based in part on the work of:
  Jean-loup Gailly and Mark Adler (zlib)
  Glenn Randers-Pehrson and the PNG Development Group (libpng)
  Miyasaka Masaru (BMP support)
  David Koblas (GIF support)

Using libpng version 1.6.10-optipng and zlib version 1.2.8-optipng

以降は~/bin/optipngを使ってPNGファイルの最適化が行える。

# optipng -o7 -snip -strip all *.png