Seam carving

Imagick2.0の作者のBlogであるMikko's Blogにて、ImageMagickSeam carving用のAPIがあったから、10分でImagickにいれたよ!って記事がのってました。
僕が見たタイミングでは、まだCVS上にもあがってなかったようですが近いうちにコミットされるような気がします。

さすがにこっちのを試すのはできなかったのでアシアルの森川さんの作ったSeam carving拡張を試して、がんばった自分へのバレンタインプレゼントにすることにしました。


まず、GDに依存しているのでGDは先にインストールしましょう。


そのほかのコンパイル方法は上記のURLに書いてある通りでOKですが、
展開したディレクトリ直下のseam_varving.cにある166行目あたりにある

 if (gdImageSX(im) > (len * 3 / 2) {
  RETURN_FALSE;
 }

を削除しないと横450pxの画像に対して、関数seam_imagecreateの第二引数に100とかの値を書くとここではじかれてしまいますのでそこだけ削除しました。(たぶん等号かえれば・・・。

<?php
ini_set('memory_limit', -1);

dl('seam_carving.so');

$im = imagecreatefromjpeg('test.jpg');
$new_im = seam_imagecreate($im, 300);
imagejpeg($new_im, 'test2.jpg');

元画像
2844906
2844906 posted by (C)個々一番

seam_imagecreateの第二引数に100を指定してみた
test4
test4 posted by (C)個々一番

seam_imagecreateの第二引数に300を指定してみた
test2
test2 posted by (C)個々一番

3つ目が妖怪っぽくってすきです。(目的違)

速度的には、早くはないですが、数秒の処理なのでキューに入れて処理とかそういう感じになりそうです。

ちなみにPHPのバージョンは5.2.5です。