画像サイズを変更する(サムネイル作成・拡大縮小) その2 - Perl,ImageMagick

この記事は2007年02月20日に書かれたものです。

サムネイルを作成するなど、画像を縮小・拡大したい。 画像の縦横比を考慮し、特定のサイズに収まるようにしたい。基本的にはその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
    );
}

関連書籍

クーガー株式会社, 石井 敦
ISBN 4844326473
¥ 10,970

昌達 慶仁
ISBN 4797344377
¥ 28,746

Gary Bradski, Adrian K…
ISBN 4873114136
¥ 4,200

Joseph N. Hall, Joshua…
ISBN 4798139815
¥ 4,104

コメント

コメントを入力. Wiki文法が有効です:
H R G L P