画像処理ライブラリのパフォーマンス比較
……っていうのがあればいいんですが、ちょっと探したところだと見当たりませんでした。品質比較なら結構あるんですけどね。というわけで、自分で少しずつ書き進めてます。
モチベーションは、ImageMagickでGIFへの変換速度が異常に遅いこと。twitterのロゴ画像をlibgdとMagick++(ImageMagickのC++ API)で変換する速度を比べると、10倍ぐらい差が出るんですよ。以下ざっとRDTSC命令で測ったクロック数。
gd png2gif: 138661147 [clock] gd png2jpeg: 81727812 [clock] Magick++ png2gif: 1246842821 [clock] Magick++ png2jpeg: 168686610 [clock]
厳密にPNGからGIFへの変換部分のみを抜き出して測ってるわけではないので、参考程度の数値なんですが、にしても遅いです。ちなみにgprofとかoprofileはVirtualBox上で動かしているからか機嫌が悪かったようなので、思ったような値を返してくれませんでした。
ちなみにすべてのPNGで遅いわけではなく、Magick++のサイトのロゴをやってみたらこのような結果にはなりませんでした。
gd png2gif: 127497390 [clock] gd png2jpeg: 362692980 [clock] Magick++ png2gif: 273114407 [clock] Magick++ png2jpeg: 947084217 [clock]
逆にJPEGへの変換が遅くなっているので、おそらくカラーテーブル周りの処理だとは思うんですが、libgdはそこをうまくやってのけているんですよね。また時間があるときに詳しく掘り下げてみたいと思います。