サムネイルを作成するなど、画像を縮小・拡大したい。
画像の縦横比を考慮し、特定のサイズに収まるようにしたい。基本的にはその1で紹介したやり方で、width,heightの値の計算をちょちょいと工夫してやればよい。
めんどくさい事はどうでも良いという人は、miniMize関数(サブルーチン)をコピペして利用すれば良い。
サンプル
;# ;#指定サイズ以下にする(縦横比を考慮) ;# use Image::Magick; #-- 最終的な縦横サイズ --# my $max_width = 320; my $max_height = 250; #-- オブジェクト作成 --# my $image = Image::Magick->new; #-- 画像を読込む --# $image->Read('./image.jpg'); #-- 現在のサイズから縮小サイズを求める --# my ($now_width, $now_height) = $image->Get('width', 'height'); my ($width, $height) = miniMize( $now_width #現在の横幅 , $now_height #現在の高さ , $max_width #最大の横幅 , $max_height ); #最大の高さ #-- 縮小/拡大 --# $image->Resize( width => $width , height => $height , blur => 0.8 ); #-- 画像を保存する(JPEG) --# $image->Write('./image_s.jpg'); #------------------------------------------------ #はみ出し調整 #------------------------------------------------ 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 ); }