2006年8月29日

サーバーサイドで画像回転

 サーバーサイドで画像を回転させたくなった。

 system 関数で convert コマンドを呼べば一発だろう。しかし、system 関数はあまり使用したくない。コマンドの起動、すなわちプロセスの生成はコストの高い処理だ。

 できたらモジュールを使って回転させたい。

 最初、PHPで作ってみた。PHPで画像処理というと、GDを使ったImage関数群がよいだろう。で、回転関数を調べたら imagerotate が見つかった。しかし、この関数だけ、呼び出したときに undefined とか言われる。スペルミスか? ドキュメントからコピペだ! それでもダメ。

 ドキュメントにはこう書いてある。

注意: この関数は、PHP がバンドル版の GD ライブラリでコンパイルされている場合のみ使用可能です。

 意味分からん。Debian で aptitude install php4-gd してインスコした環境ではダメなのか。これだけのためにPHPを make すんのは面倒だよなぁ。


 PHP がダメなら Perl を使ってやる!

 ということで Perl のモジュールを調べ始める。

 Perl GD で、同じ地雷踏んだらイヤだな。PerlMagick を使ってみよう。aptitude install perlmagick でインスコ。

 しかし、Rotate関数を使ってみたら遅かった。角度指定が任意角度なので、90度回転であっても真面目に一次変換とかしているのだろう。ボクは90度回転に特化した高速処理をしたいのだ!

 Transpose がそれなのか? いや、これは縦横入れ替えだ。x軸 y軸 を単に入れ替えるので、画像が鏡像になってしまう。


 PerlMagick 捨て。次は Perl GD だ。PHP GD で制約があったのでちょっと不安だが、aptitude install libgd-gd2-perl でインスコ。

 その結果、copyRotate90 で高速回転できた。

Posted by rukihena at 23:08:30
トラックバックURL

このエントリーのトラックバックURL:
http://weblog.rukihena.com/mt/mt-tb.cgi/545

コメント