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のアイコンにするという処理なので、とりあえずちょっと書き直したら動いたけど、
use Imager
例えば scale() の項目を見ると、200x200に「収まるように」小さくするには、type => 'min'、縦横比を無視してそのサイズに引き伸ばしたい場合は type => 'nonprop' というオプションをつければいいことがわかります。
minっていうオプション付けれぼ綺麗にかけそう。
そういえば、ImagerとかImage::Magick,imlib2なんかのリサイズを比較したエントリあったなと、livedoorclip探した。タグつけしないと探しづらくてあかんなぁ。