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 で高速回転できた。
このエントリーのトラックバックURL:
http://weblog.rukihena.com/mt/mt-tb.cgi/545