Get the width and height from images
Smartyって画像サイズを自動的に<img />に埋め込んだりするんですね。
というわけで、Perlで画像サイズを得るのに何が速いかベンチマークしてみました。
結果:
Image::Info/1.30 Image::Size/3.221 Imager/0.75 GD/2.45 Rate GD Imager Image::Info Image::Size GD 77.2/s -- -69% -79% -100% Imager 251/s 226% -- -32% -99% Image::Info 368/s 377% 47% -- -99% Image::Size 37959/s 49074% 15002% 10203% --
Image::Sizeがその他のモジュールよりも100倍以上の差をつけています。サイズを取るだけならpure PerlであるImage::Size以外の選択肢を考える必要はなさそうですね。
スクリプト:
#!perl -w use strict; use Benchmark qw(:all); use Image::Info qw(image_info dim); use Image::Size qw(imgsize); use Imager; use GD; use FindBin qw($Bin); foreach my $mod(qw(Image::Info Image::Size Imager GD)) { print "$mod/", $mod->VERSION, "\n"; } if(0) { use Data::Dumper; print "Image::Info: ", Dumper [ dim(image_info("$Bin/viola.jpg")) ]; print "Image::Size: ", Dumper [ imgsize("$Bin/viola.jpg") ]; my $im = Imager->new(file => "$Bin/viola.jpg") or die Imager->errstr; print "Imager: ", Dumper [ $im->getwidth, $im->getheight ]; my $gd = GD::Image->new("$Bin/viola.jpg"); print "GD: ", Dumper [$gd->width, $gd->height]; } cmpthese -1, { 'Image::Info' => sub { my($w, $h) = dim(image_info("$Bin/viola.jpg")); }, 'Image::Size' => sub { my($w, $h) = imgsize("$Bin/viola.jpg"); }, 'Imager' => sub { my $im = Imager->new(file => "$Bin/viola.jpg"); my($w, $h) = ( $im->getwidth, $im->getheight); }, 'GD' => sub { my $im = GD::Image->new("$Bin/viola.jpg"); my($w, $h) = ( $im->width, $im->height); }, };