WordPressでBMPを扱うためにImageMagickをInstall

wordpress_imagemagick_bmpAndroidアプリからWordPressにPOSTした画像を処理する際に下記エラーが出力された。

No editor could be selected.

環境: CentOS 5.9, nginx 1.4.1, PHP 5.4.17, WordPress 3.5.0

ソースを追ってみると、GDライブラリはBMPを扱ってない(wp-includes/class-wp-image-editor-gd.phpの60行目あたり)。ImageMagickを使うと出来そうなのでインストールしてみた。

※結局YUM経由のImageMagickは古かったので、この辺は読み飛ばしてOK。

remiレポジトリは前の記事を参考に。

# yum install ImageMagick-devel.x86_64 --enablerepo=remi

/var/tmp/imagick/imagick_class.c: In function 'zim_imagick_setimageprogressmonitor':
/var/tmp/imagick/imagick_class.c:9534: error: 'struct _php_core_globals' has no member named 'safe_mode'
/var/tmp/imagick/imagick_class.c:9534: error: 'CHECKUID_CHECK_FILE_AND_DIR' undeclared (first use in this function)
/var/tmp/imagick/imagick_class.c:9534: error: (Each undeclared identifier is reported only once
/var/tmp/imagick/imagick_class.c:9534: error: for each function it appears in.)
/var/tmp/imagick/imagick_class.c:9534: error: 'CHECKUID_NO_ERRORS' undeclared (first use in this function)
make: *** [imagick_class.lo] Error 1
ERROR: `make' failed

下記サイトを参考にBetaバージョンをインストール。

# pear config-set preferred_state beta
# pecl install imagick
# vi /etc/php.d/imagick.ini

extension=imagick.so

# /etc/rc.d/init.d/php-fpm restart

phpinfo()で確認。

image

これでも最初のエラーが表示されBMP画像を加工できない。

さらにソースを追ってみると、
class-wp-image-editor-imagick.php
の96行目あたりで

// setIteratorIndex is optional unless mime is an animated format.
// Here, we just say no if you are missing it and aren't loading a jpeg.
if ( ! method_exists( 'Imagick', 'setIteratorIndex' ) && $mime_type != 'image/jpeg' )
        return false;

setIteratorIndexメソッドがあるかチェックしてる。これはImageMagick 6.2.9以上からサポートされているみたい(yumでインストールされたのは6.2.8)。

今度は公式サイトを参考に最新版をソースからインストールしてみる。

まずはさっきのをアンインストール。
# pecl uninstall imagick
# yum remove ImageMagick-devel

Image Magickをダウンロードしてインストール
# cd /opt/software/
# wget http://www.imagemagick.org/download/ImageMagick.tar.gz
# tar xzvf ImageMagick.tar.gz
# cd ImageMagick-6.8.6-4/
# ./configure
# make
# make install

imagickもソースからコンパイルする。下記サイトを参考に。

シンボリックリンクを貼っておく。これをしないとエラーになる。
# ln -s /usr/local/include/ImageMagick-6 /usr/local/include/ImageMagick

# cd ../
# wget http://pecl.php.net/get/imagick-3.1.0RC2.tgz
# tar xzvf imagick-3.1.0RC2.tgz
# cd imagick-3.1.0RC2
# phpize
# ./configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
# make
# make install

Installing shared extensions:     /usr/lib64/php/modules/
Installing header files:          /usr/include/php/

/etc/php.d/imagick.ini
はさっき作ったのでそのまま。

# /etc/rc.d/init.d/php-fpm restart

phpinfo()で確認。

image

これで成功。

 

< Related Posts >