Imagick::resizeImageのフィルタ別速度を計測してみた
Imagick::resizeImageメソッドにはデフォルトでやたらフィルタが用意されていますけど、どれが良いのかさっぱりわからないので全部計測してみました。チェックしたのは http://www.php.net/manual/ja/imagick.constants.php で定義されているフィルタ定数すべてです。
ベンチマーク計測には PEAR::Benchmark を使ってみました。
測定条件
利用した画像
PHOTOHITOからクリエイティブコモンズライセンスが指定されている下記の画像を使わせていただきました。
- insane99さんの写真 PHOTOHITO: SONY(ソニー)のカメラ DSLR-A900で撮影した人物(DSC01478)の写真(画像) - 写真共有サイト:フォトヒト
- 画像サイズ: 4032 x 6048
この画像の長辺を1024pxに縮小する処理でベンチを取ってみました。
ベンチ測定コード
毎回同じ画像読み込んで、フィルタ別にリサイズするだけのコードです。
<?php require_once 'Benchmark/Timer.php'; $filter = array( 'undefined' => imagick::FILTER_UNDEFINED, 'point' => imagick::FILTER_POINT, 'box' => imagick::FILTER_BOX, 'triangle' => imagick::FILTER_TRIANGLE, 'hermite' => imagick::FILTER_HERMITE, 'hanning' => imagick::FILTER_HANNING, 'hamming' => imagick::FILTER_HAMMING, 'blackman' => imagick::FILTER_BLACKMAN, 'gaussian' => imagick::FILTER_GAUSSIAN, 'quadratic' => imagick::FILTER_QUADRATIC, 'cubic' => imagick::FILTER_CUBIC, 'catrom' => imagick::FILTER_CATROM, 'mitchell' => imagick::FILTER_MITCHELL, 'lanczos' => imagick::FILTER_LANCZOS, 'bessel' => imagick::FILTER_BESSEL, 'sinc' => imagick::FILTER_SINC ); $timer = new Benchmark_Timer(); $timer->setMarker('start'); $image = new Imagick(); foreach ($filter as $key => $value) { $image->readImage('./imagick-benchmark.jpg'); $image->resizeImage(0, 1024, $value, 1); $image->writeImage("./imagick-benchmark-$key.jpg"); $image->clear(); $timer->setMarker("filter_$key"); } $image->destroy(); $timer->stop(); $timer->display();
測定結果
marker | time index | ex time | perct |
---|---|---|---|
Start | 1260871659.59941500 | - | 0.00% |
filter_undefined | 1260871665.86842200 | 6.2690069675446 | 6.56% |
filter_point | 1260871670.85382700 | 4.9854049682617 | 5.21% |
filter_box | 1260871675.76367100 | 4.9098439216614 | 5.13% |
filter_triangle | 1260871680.99208100 | 5.2284100055695 | 5.47% |
filter_hermite | 1260871686.43630300 | 5.4442219734192 | 5.69% |
filter_hanning | 1260871693.67035700 | 7.2340540885925 | 7.56% |
filter_hamming | 1260871700.61708200 | 6.9467251300812 | 7.26% |
filter_blackman | 1260871707.45802100 | 6.8409388065338 | 7.15% |
filter_gaussian | 1260871712.89468100 | 5.4366600513458 | 5.69% |
filter_quadratic | 1260871718.32548100 | 5.4307999610901 | 5.68% |
filter_cubic | 1260871724.02629700 | 5.70081615448 | 5.96% |
filter_catrom | 1260871729.90510900 | 5.8788118362427 | 6.15% |
filter_mitchell | 1260871735.57420000 | 5.6690909862518 | 5.93% |
filter_lanczos | 1260871741.90656400 | 6.3323640823364 | 6.62% |
filter_bessel | 1260871748.33760900 | 6.4310450553894 | 6.73% |
filter_sinc | 1260871755.22181000 | 6.8842010498047 | 7.20% |
Stop | 1260871755.22493200 | 0.0031218528747559 | 0.00% |
total | - | 1260865367.140610 | 0.00% |
まとめ
*1:後から処理した画像は比較のため追加する予定