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

サムネイルを作成するなど、画像を縮小・拡大したい。

縮小率(拡大率)などが決まっている場合、例えば一律50%に縮小するといったことは、非常にかんたんに行える。次の例では、読み込んだ画像の縦、横のピクセル数を取得し、50%のサイズにリサイズを行い、保存するというプログラムである。

サンプル

;#
;#半分のサイズにする
;#

use Image::Magick;

#-- オブジェクト作成 --#
my $image = Image::Magick->new;

#-- 画像を読込む --#
$image->Read('./image.jpg');

#-- 現在の縦・横を取得 --#
my ($now_width, $now_height) = $image->Get('width', 'height');

#-- 縮小/拡大 --#
$image->Resize(
          width  => int($now_width  * 0.5)  #100% -> 50%
        , height => int($now_height * 0.5)  #100% -> 50%
        , blur   => 0.8
);

#-- 画像を保存する(JPEG) --#
$image->Write('./image_s.jpg');

読み込んだ画像を、Resizeメソッドのwidthとheightで指定した大きさに変更することが出来る。blurはピントのような物で、1未満ならくっきりとシャープに、1を超える値ならぼかしたような感じになる。縮小する際には若干シャープにしておくとキレイになる。

ここでは現在の縦横のサイズから計算した値を用いているが、もちろん固定値(定数)も利用できる。次の例ではどんなサイズの画像を読み込んでも、横300ピクセル、縦250ピクセルになる。

$image->Resize(
          width  => 300
        , height => 250
        , blur   => 0.8
);

※固定値を用いる場合、画像の縦横比を考慮しないと画像によっては大きく崩れる点に注意。

ちなみに、拡大したい場合には少数(0.5)をかけている部分を変更する。つまり整数値(1.0~)をかけてやれば良い。「1.2」をかければ20%拡大した画像となる。(ここらへんは算数ですね(^^;)