暇なのでimagemagickで遊んでみた


以下のサイトで高速に使えると書かれていたので試してみました。
本当は速いImageMagick: サムネイル画像生成を10倍速くする方法

;#
;#指定サイズ以下にする(縦横比を考慮)
;#
use Image::Magick;
use Time::HiRes qw(gettimeofday);
#現在の時間を得る
my($sec,$microsec)=gettimeofday();
#-- 最終的な縦横サイズ --#
my $max_width = 320;
my $max_height = 250;
#コマンドライン経由で処理を行う
my $format = `identify test.jpg`;
my ( $name, $format, $pix_size ) = (split(/ /, $format))[0,1,2];
my ( $now_width, $now_height) = split(/x/, $pix_size);
#-- 現在のサイズから縮小サイズを求める --#
my ($width, $height)
= miniMize(
$now_width #現在の横幅
, $now_height #現在の高さ
, $max_width #最大の横幅
, $max_height ); #最大の高さ
#-- オブジェクト作成 --#
my $size = "$widthx$height";
#newするときにサイズを与える(高速化)
my $image = Image::Magick->new(size => $size);
#-- 画像を読込む --#
$image->Read('./test.jpg');
#-- 縮小/拡大 --#
$image->Resize(
width => $width
, height => $height
, blur => 0.8
);
#-- 画像を保存する(JPEG) --#
$image->Write('./test_s.jpg');
undef $image;
#現在の時間を得る
my($sec2,$microsec2)=gettimeofday();
my $proctime = $sec2 - $sec;
print "time = ".$proctime."\n";
#------------------------------------------------
#はみ出し調整
#------------------------------------------------
sub miniMize{
my $x = shift;
my $y = shift;
my $max_x = shift;
my $max_y = shift;
#-- 比率を計算 --#
my $x_hi = _min($x, $max_x) / _max($x, $max_x);
my $y_hi = _min($y, $max_y) / _max($y, $max_y);
#-- 比率の小さな方で計算して返す --#
if( $x_hi > $y_hi ){
return( (($x * $y_hi), ($y * $y_hi)) );
}
else{
return( (($x * $x_hi), ($y * $x_hi)) );
}
}
#------------------------------------------------
#大きな値を返す
#------------------------------------------------
sub _max{
my $a = shift;
my $b = shift;
return(
($a > $b)? $a:$b
);
}
#------------------------------------------------
#小さな値を返す
#------------------------------------------------
sub _min{
my $a = shift;
my $b = shift;
return(
($a < $b)? $a:$b
);
}
|<<
結果、4秒かかっていた処理が2秒になりました!!


0 件のコメント :

コメントを投稿