« 画像サイズを変更する [その1] (サムネイル・拡大縮小) | メイン | 画像にノイズを加える »

カテゴリー:ImageMagick 

画像サイズを変更する [その2] (サムネイル・拡大縮小)

このエントリーを含むはてなブックマーク  livedoorクリップ  画像サイズを変更する [その2] (サムネイル・拡大縮小)をdel.icio.usに追加  画像サイズを変更する [その2] (サムネイル・拡大縮小)をYahoo!ブックマークに追加  画像サイズを変更する [その2] (サムネイル・拡大縮小)をニフティクリップに追加

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




トラックバック

このエントリーのトラックバックURL:
http://katsubemakito.net/mt/mt-tb.cgi/581

この一覧は、次のエントリーを参照しています: 画像サイズを変更する [その2] (サムネイル・拡大縮小):

» 画像サイズを変更する [その1] (サムネイル・拡大縮小) from CGI・Perl例文集
サムネイルを作成するなど、画像を縮小・拡大したい。 縮小率(拡大率)などが決まっ... [詳しくはこちら]






クリエイティブ・コモンズ・ライセンス
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.