ImagickのroundCornersを使うための旅(失敗編)
みなさんこんばんは。
さて。
PHPの拡張機能にある、Imagickで色々ハマったことを今日はブログにつらつら書きます。
ことの始まり
まず発端は、コレです。
Keitaです。最近、モテるためにがんばっていますが、周りの女性は誰一人として振り向いてくれません。
さて、そんなわけで、世間では、いろいろな角を丸めると、モテるといううわさを聞いてとりあえず角を丸めることにしてみました。
へ〜こんな便利な機能があるのか〜。
俺もモテたい!!
まぁ知ってたけど。
とりあえず、前々から気になっていたPHPのImagick拡張。PHPリファレンスのImagickの項にもあるとおり、膨大なAPIが用意されていて、imagecreatehogehogehogehoge みたいな長い名前のGD関数なんかよりよっぽど使いたいな、と思わせる拡張です。
しかし、PECLのインストールが必要だったりなど、多少面倒な部分があります。
しかし、角は丸めたい。
そんなわけで、今日は角を丸める方法をば。ちなみに環境はタイトルにあるとおり、(VMWare上の)CentOS 5.2で、PHP 5.2.6です。
長くなるので2回にわけてww
まずは、知識の共有ということで、失敗した点について。yumでImageMagick-develをインストールし、PECLでimagickをインストールします。
yumでImageMagick-develをインストール
お決まりのパターンですが、yumでImageMagickをインストールします。
% sudo yum install ImageMagic-devel
すると、CentOS-baseから ImageMagick 6.2.8がインストールされます。
% convert --version Version: ImageMagick 6.2.8 04/17/08 Q16 file:/usr/share/ImageMagick-6.2.8/doc/index.html Copyright: Copyright (C) 1999-2006 ImageMagick Studio LLC
PECL で imagick-2.2.0 のインストール
これもコマンドひとつ打つだけ。(peclコマンドが無いとか言う人は、このへんとかを参考に)
% sudo pecl install imagick
すると、きっちり imagick 2.2.0がインストールされるので、あとは ini ファイルの設置。
% echo "extension=imagick.so" > /etc/php.d/imagick.ini
で、
% php -i | grep imagick /etc/php.d/imagick.ini, imagick imagick module => enabled imagick module version => 2.2.0 ...
とかなればOK。
roundCornersを使ってみる。
<?php $Img = new Imagick("image.jpg"); $Img->roundCorners(20, 20); $Img->writeImage("image_new.jpg"); $Img->destroy();
たとえば、こんなかんじ。
ところが!
Fatal error: Call to undefined method Imagick::roundCorners() in ...
などとエラーが!!!
roundCornersメソッドが無いですってー!!!
PECLのサイトでバージョンの確認
- Imagick::roundCorners()
つまりroundCornersメソッドが追加されたのは、2.0.0b1からなので、今回ローカルにインストールされている2.2.0では問題なく使えるはずです。
しかし、
% php -r 'Reflection::export(new ReflectionClass("Imagick"));' | grep roundCorners
を実行したところ、微塵も出力がありませんでした。
ImageMagickのAPIバージョンの確認
ここで、Imagick拡張に問題がないのなら、ImageMagick本体のほうでは?と思ったので、調査をしていたところ、Imagickの作者であるMikkoのブログ(コメント欄)に、
Peter Schumacher
Oct 9th 2007 at 10:38 am 6Getting this error when running your script,
Fatal error: Call to undefined method Imagick::roundCorners() in /var/www/apache2-default/index.php on line 12
(snip)
Mikko Koppanen
Oct 9th 2007 at 10:48 am 7This is a documentation error. I’ll fix that today. Imagick::roundCorners requires at least ImageMagick version 6.2.9.
Pretty thumbnails « Mikko’s blog
という情報をハッケン。
バージョンが0.0.1たりねー!
ということで、とりあえずImageMagickを最新にすることにしました。
rpm パッケージから ImageMagick 6.4.3 をインストール
・・・しようとしたのですが、これが結果的に大失敗。
から、ImageMagick-6.4.3-1.i386.rpm を落としてきて、
% sudo rpm -Uvh ImageMagick-6.4.3-1.i386.rpm
などとしたところ、
エラー: 依存性の欠如: libHalf.so.6 は ImageMagick-6.4.3-0.i386 に必要とされています libIex.so.6 は ImageMagick-6.4.3-0.i386 に必要とされています libIlmImf.so.6 は ImageMagick-6.4.3-0.i386 に必要とされています libIlmThread.so.6 は ImageMagick-6.4.3-0.i386 に必要とされています libImath.so.6 は ImageMagick-6.4.3-0.i386 に必要とされています libautotrace.so.3 は ImageMagick-6.4.3-0.i386 に必要とされています libcdt.so.4 は ImageMagick-6.4.3-0.i386 に必要とされています libdjvulibre.so.15 は ImageMagick-6.4.3-0.i386 に必要とされています libgraph.so.4 は ImageMagick-6.4.3-0.i386 に必要とされています libgvc.so.4 は ImageMagick-6.4.3-0.i386 に必要とされています libjasper.so.1 は ImageMagick-6.4.3-0.i386 に必要とされています liblqr-1.so.0 は ImageMagick-6.4.3-0.i386 に必要とされています libMagick.so.10 は (インストール済み)ImageMagick-devel-6.2.8.0-4.el5_1.1.i386 に必要とされています libWand.so.10 は (インストール済み)ImageMagick-devel-6.2.8.0-4.el5_1.1.i386 に必要とされています ImageMagick = 6.2.8.0-4.el5_1.1 は (インストール済み)ImageMagick-devel-6.2.8.0-4.el5_1.1.i386 に必要とされています
と、依存性のエラーが大量に出てしまいます。
しかもlibHalfとか色々検索してopenexrをインストールすれば良い的な情報もあったのでインストールしたけど効果ないし。
色々検索して、海外のフォーラムに同じようなことを悩んでいる人は見つけたのですが、解決方法はナシ。*1 *2
もうらめら・・・と思って、ソースからインストールすることに決定。
→成功編へ続くw
*1:[http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=11664:title]
*2:[http://fedoraforum.org/forum/archive/index.php/t-188048.html:title]