[Perlメモ]ImageMagickで画像サイズ変更

ウェブアプリ等で画像を扱う大抵の場合ImageMagickかGDを使うことになるかとおもいます。

ImageMagickで用途が多いと思われる画像サイズの変更を行う方法をメモしておきます。

検索しても割と出てきにくいので困った方もいるかと思います。(幅だけ指定のはよく出てくるけど、縦横指定でアスペクト比固定の方法がみつからないんですよね)

とりあえずサブルーチンとして書くとこんな感じかなと思います。

&ReSave(“inp.jpg”,”outp.jpg”,800,600);

みたいにコールして使います。

#
# usage &ReSave(input file,output file,max image width,max image height);
#

sub ReSave{
    use Image::Magick;

    my($fname)    = $_[0];                    #入力ファイルパス
    my($out)    = $_[1];                    #出力ファイルパス
    my($maxwidth)    = $_[2];                #縮小実行トリガサイズ
    my($maxheight)    = $_[3];                #縮小実行トリガサイズ

    my($i) = Image::Magick->new;            #Image Magick用オブジェクト生成

    $i->Read($fname);

    #縦横比を保ってサイズの変更
    $i = $i->Transform(geometry=>"$maxwidth x $maxheight");

    $i->Set(quality=>90);                    #圧縮率変更!やってみてます。
    $i->Write("$out");                    #イメージを指定フォーマットで書き出し

    undef $i;                                # オブジェクト破棄
}

 

ミソの部分は

$i = $i->Transform(geometry=>"$maxwidth x $maxheight");

ですね。これで縦横比(アスペクト比)を保ったまま、指定した幅と高さ内で画像を拡大や縮小する事ができます。

下の様に書くと幅だけを指定して幅のピクセルを基準に縦横比を保ったまま画像のサイズを変更できます。

$i = $i->Transform(geometry=>"$maxwidth x");

 

下の場合は高さだけを指定した場合で高さを基準に縦横比を保ったまま画像のサイズを変更できます。

$i = $i->Transform(geometry=>"x $maxheight");

 

後は、画質を90で書きだしています。書きだすときにWriteにちょっと書きたすだけで別の画像形式で書き出せたりするのがImageMagickのいいところですね。

http://www.libgd.org/Main_Page Main Page – LibGD
GD Graphics Library

ImageMagick逆引きコマンドリファレンス
amazon 楽天

最近は書籍があっていいですね。

(Visited 933 times, 1 visits today)

タグ :