Seam Carvingで自然に画像をリサイズするPHPエクステンション
以前に紹介したSeam Carvingという技術を使用したプログラムをPHPエクステンションで実装してみました。
実験的なものなのでご利用は自己責任でお願いします。
少し前の話題となってしまいますが、Seam Carvingを使用した画像のリサイズが話題になりました。
オンラインサービスでresizrというものまで出てきているようです。
ロジック自体は単純なので割とすぐにPHPで実装できたのですが、パフォーマンスが最悪だったのです。
そこで、PHPエクステンションなら何となるかなと思いトライしてみました。
seam_carving.tar.gz
※ cocoiti さんの指摘を修正しました。ご指摘ありがとうございます!
以下のように画像を縮小することができます。
256×768
さすがに4分の1にまで縮小すると汚くなってしまいます。
エクステンション自体のインストールはtar.gzを解凍して、phpize、configure、make とします。
$ tar xzf seam_carving.tar.gz
$ cd seam_carving
$ phpize
$ ./configure
$ make
modulesディレクトリにseam_carving.soができあがるので make install でインストールするなり、どこかのディレクトリにおいておきます。
準備ができたら、以下のようにしてリサイズします。
<?php
dl('seam_carving.so');
$im = imagecreatefromjpeg('Antelope.jpg');
$new_im = seam_imagecreate($im, 100);
画像のリサイズは seam_imagecreate関数で実行します。第1引数がGDの画像リソースで、第2引数が横方向にカットするピクセル数です。
マシンスペックにもよると思いますが、1024×768の画像を1秒で10ピクセルくらいずつカットすることができました。
これでもずいぶんとPHPプログラムでの実装よりは高速になっています。エクステンションのコードを修正すれば、まだまだ高速化できると思います。
まだまだエクステンションの書き方がわかっていないので、エラー処理ができていません。異常終了したりするかもしれません。。
そこら辺は多めに見てください^^;