画像サイズの取得

CGIテクニック集トップへ





概要

GDを利用し画像ファイルから画像サイズを取得します。この手法は当サイトで公開されている画像を扱うほとんど全てのCGIで利用されていますが、Image::Sizeを使って画像サイズを取得する方法の方が簡単です。

必用な処理

  1. 画像ファイルからオブジェクトを作成
  2. オブジェクトから画像ファイルのサイズ(geometry)を取得

サンプルコード

 use GD;
 
 my $im;
 $im =~ /\.jpe?g$/i and $im = GD::Image->newFromJpeg($imagefile);
 $im =~ /\.gif$/i   and $im = GD::Image->newFromGif($imagefile);
 $im =~ /\.png$/i   and $im = GD::Image->newFromPng($imagefile);
 $im =~ /\.xbm$/i   and $im = GD::Image->newFromxbm($imagefile);
 $im =~ /\.gd$/i    and $im = GD::Image->newFromgd($imagefile);
 $im =~ /\.gd2$/i   and $im = GD::Image->newFromgd2($imagefile);
 $im =~ /\.xpm$/i   and $im = GD::Image->newFromxpm($imagefile);
 
 my ($width, $height) = $im->getBounds();

コードの解説

 use GD;

GDを定義します。GDのさまざまなメソッドを利用します。

 my $im;
 $im =~ /\.jpe?g$/i and $im = GD::Image->newFromJpeg($image);
 $im =~ /\.gif$/i   and $im = GD::Image->newFromGif($image);
 $im =~ /\.png$/i   and $im = GD::Image->newFromPng($image);
 $im =~ /\.xbm$/i   and $im = GD::Image->newFromxbm($image);
 $im =~ /\.gd$/i    and $im = GD::Image->newFromgd($image);
 $im =~ /\.gd2$/i   and $im = GD::Image->newFromgd2($image);
 $im =~ /\.xpm$/i   and $im = GD::Image->newFromxpm($image);

$imageには画像ファイル名が入っていると仮定します。ファイルの拡張子によりファイルタイプを認識しGD::Image->newFromxxxによりそのファイルからオブジェクトを作成します。オブジェクトは$imに格納されます。

古いバージョンのGDではnewFromGifがサポートされていません。また、拡張子と実際の画像タイプが違う場合はGDからエラーがでます。ファイルサイズが0などとにかくGDを騙すようなファイルの場合にはGDがエラーになります。これらのエラーはFatalでスクリプト自体が動かなくなります。サーバーのerror log等から原因を解明しエラーの原因となるファイルを修正するとよいでしょう。

 my ($width, $height) = $im->getBounds();

getBoundsメソッドにより画像サイズを取得します。$widthに幅、$heightに高さ情報が入ります。

関連するCGIテクニック

Image::Sizeを使って画像サイズを取得する方法
画像サイズ変更の仕方
サムネイルの作り方
画像ファイルサイズを制限したサムネイルの作り方
画像プリロードの仕方
Exif情報の取得の仕方