画像の横幅・高さを取得する - Perl,ImageMagick

画像の縦横のピクセル数をそれぞれ取得したい。
あらかじめサイズが分かっていない場合など、縦横比を維持したまま拡大・縮小を行うには現在のサイズを取得するところから処理を書き始める必要がある。

サンプル(PerlMagick)

;#
;#画像の縦、横のピクセル数を取得する
;#

use Image::Magick;

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

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

#-- 種類を取得 --#
my ($width, $height) = $image->Get('width', 'height');

ImageMagick(PerlMagick)は巨大なファイルを扱うのには向いていない。一度内部でビットマップに変換し、処理を行うことから、数千ピクセルの画像を開くと数百メガのメモリを喰うこともざらである(使用するメモリを制限することもできる)。

若干反則気味ではあるが、ImageMagickをインストールすると自動的に入る「identify」を次のように、コマンドライン経由で利用するのも一つの手である。巨大なファイルの処理を行う時はこれらも検討されたい。

サンプル(identify)

my $format = `identify $file`;
my ( $name, $format, $pix_size ) = (split(/ /, $format))[0,1,2];
my ( $width, $height) = split(/x/, $pix_size);

本当にどうしようもない場合、それほど難しい処理でないなら、Cでlibjpegなどのライブラリを用いる...といった方法もあるが結構めんどい。上記のような回避策をまずは試して解決するならそれが一番かも。