YAPC::Asia 2009で大規模画像配信とPerlについて発表しました。
会社のブログの方に資料公開しましたので、
このブログでも紹介です
一部パワポのアニメーション機能使っている部分が抜けていますので 会社ブログの方で公開しているPPTファイルも参照して頂けると幸いです
資料の中で、Image::Magickのベンチマークをしているのですが、その際画像サイズの変更のアルゴリズムについては触れていませんでした。
確かに画質は悪くなりますが、変換のアルゴリズムを変更するとスピードがあがります。
ImageMagickの画像の拡大縮小のアルゴリズムについては以下のページが参考になります。
りゃくえふ
» Blog Archive » ImageMagickの画像の縮小
しかし実際、Image::Magickが重たいのは画像loadの時です。
Image::MagickのReadだけと、Imlib2で画像を縮小したときのベンチマークをしてみます。
timethese(
100 => {
imagemagick => sub {
my $img = Image::Magick->new($orig_width, $orig_height);
my $x = $img->Read($srcfile);
die "$x" if $x;
},
"imlib2" => sub {
my $im = Image::Imlib2->load( $srcfile );
my $im2 = $im->create_scaled_image($width, $height);
$im2->set_quality(85);
$im2->save('imlib2.jpg');
}
}
);
結果は、
Benchmark: timing 100 iterations of imagemagick_load, imlib2...
imagemagick: 3 wallclock secs ( 2.38 usr + 0.05 sys = 2.43 CPU) @ 41.15/s (n=100)
imlib2: 2 wallclock secs ( 2.38 usr + 0.06 sys = 2.44 CPU) @ 40.98/s (n=100)
なんと、ほぼ同じ。
Image::Magickは画像を読み込んだ際に様々な処理を行っているからこのような速度の差になるんでしょうね。
ということで、画像のライブラリは適材適所で選択しませう。