Image::Magick で画像の読み込み
Image::Magick を使って画像を読み込みごにょごにょするというプログラムを書いていたのですが、マニュアルに振り回されて大分時間を浪費してしまい悔しかったのでメモ。
Image::Magick の man をみると、すごく基本的なコード例と詳しくはこちらを参照というポインタがあるので、それにしたがってサイトで確認。
画像の読み込みの時の戻り値が知りたくてマニュアルのRead or Write an Image て部分を確認してみました。
Read 関数の戻り値は「the number of images read」となっているので、読み込みに失敗したら戻り値と数が合わないということだろうと。
my $img = new Image::Magick; $img->Read('sample.jpg') or die "Cannot read image file: $!";
でいいじゃないかと思ったのですが、常に画像の読み込みに失敗している様に見えるので、読み込みファイルを変えてみたりパスを変えてみたりいろいろしたのですが改善しないんですね。
なんとなく Example Script の部分 を見てみたら
$image = Image::Magick->new; $x = $image->Read('girl.png', 'logo.png', 'rose.png'); warn "$x" if "$x";
てなっているじゃないですか。
$x が真ならWarning出力、しかも $x 自体をエラーログに出力ってことはエラーメッセージかエラーコードが戻るのか?何事もなく画像が読み込めれば戻り値なしってことか。。?
てーい、マニュアルめー、何が読み込んだ画像数を返すだー、真偽値すら逆じゃないかー。
成功時には die って書いてちゃそりゃ動かないよね。
というわけで条件を反転して解決。