Perlで画像のサイズを取得する方法

PerlでJPEGやGIF、PNGのサイズを取得する方法で悩む。

GDとGDモジュールを使う方法が一番シンプルだけどGDをインストールしなきゃならない。なかなかめんどくさい。

かといって自作でバイナリを解析するつもりは毛頭ない。

PHPがインストールされていて、外部プロセスを起動する負荷を厭わなければ、PHP のgetimagesize関数を使うのが一番気楽だろう。この関数はGDがなくても動くのがうれしいところ。

で、PHPのスクリプトはこんな感じ。仮に getsize.php という名前で保存するとしよう。

<?
if(is_file($argv[1]))
{
    list($w, $h) = getimagesize($argv[1]);
    print "$w,$h";
}
?>

Perl では、

my ($w, $h) = split(/,/, `php -f getsize.php <画像のパス>`);

とすりゃーよいだけ。

蛇足ながら...

  • php や getsize.php はフルパスで書きましょう。
  • $w と $h が defined されているかチェックしましょう。
  • 画像へのパスを利用者に入力させるのであれば、; や & など怪しい文字列が含まれていないかチェックしましょう