FC6のこんな構成で
- httpd-2.2.4-2.fc6
- mod_perl-2.0.2-6.1
- mod_fcgid-2.1-1.fc6
- Catalyst 5.7007
- ImageMagick-perl-6.2.8.0-4.fc6
- ImageMagick-6.2.8.0-4.fc6
CatalystからImage::Magickが動かない。Catalyst組み込みのサーバーだとOKなんだけど、mod_perl,fcgidでは動かない。
どうも、アップロードしたファイルが読めてないようで、
my $i = Imager->new; $i->read(file => $upload->tempname);
のところでコケテル。あーselinuxの設定か?と思って見直したんだけど、全然違った。単順にアップロードするだけならできてるし、readできてないみたい。
もうちょっと追ってみたら、
Exception 420: no decode delegate for this image format
とあってどうもImage::Magickがファイルの形式判別できてないみたいな感じ。
うーん、全然わからんなぁと悩んでたら、use Imager; という記事がナイスなタイミングで。
ナイスすぎる。早速乗り換え。
っていうかちょっと書き直しただけですぐ動いた。
my $i = Imager->new; $i->read(file => $photo_data->tempname); my $w = $i->getwidth(); my $h = $i->getheight(); my ($width,$height,$top,$left); if($w > $h){ $width = $h; $height = $h; $top = 0; $left = int(($w - $h)/2); }elsif($h > $w){ $width = $w; $height = $w; $top = int(($h - $w)/2); $left = 0; }
画像を正方形にして36pxのアイコンにするという処理なので、とりあえずちょっと書き直したら動いたけど、
例えば scale() の項目を見ると、200x200に「収まるように」小さくするには、type => 'min'、縦横比を無視してそのサイズに引き伸ばしたい場合は type => 'nonprop' というオプションをつければいいことがわかります。
minっていうオプション付けれぼ綺麗にかけそう。
そういえば、ImagerとかImage::Magick,imlib2なんかのリサイズを比較したエントリあったなと、livedoorclip探した。タグつけしないと探しづらくてあかんなぁ。