読者です 読者をやめる 読者になる 読者になる

肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

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のサイトでバージョンの確認

PECLのImagick拡張のページでは、

  1. Imagick::roundCorners()

つまりroundCornersメソッドが追加されたのは、2.0.0b1からなので、今回ローカルにインストールされている2.2.0では問題なく使えるはずです。

しかし、

% php -r 'Reflection::export(new ReflectionClass("Imagick"));' | grep roundCorners

を実行したところ、微塵も出力がありませんでした。

ImageMagickAPIバージョンの確認

ここで、Imagick拡張に問題がないのなら、ImageMagick本体のほうでは?と思ったので、調査をしていたところ、Imagickの作者であるMikkoのブログ(コメント欄)に、

Peter Schumacher
Oct 9th 2007 at 10:38 am 6

Getting 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 7

This 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]