この記事は最後に更新してから1年以上経過しています。

開発環境(Windows 8)にimagickを入れる

説明

WordPress 3.5のイメージエディタ(WP_Image_Editor)は、GDだけでなく、imagick(ImageMagick)にも対応している。そんなわけでWindows 8の開発環境にimagickをインストールしてみた。

imagickをダウンロード

Windowsの開発環境の整備で困るのは、ソースコードからのビルド。Linux環境のように標準でビルドすることができないことだろう。そんなわけで、今回はWindows向けのバイナリを探すところから始めた。

検索して見つかったのが「MIKKO'S BLOG」(このサイト、WordPressで構築されていますね)。ここの「New builds for PHP 5.4 and PHP 5.3」にアクセスして、「imagick-php54-php53.tgz」をダウンロードした。

ダウンロードしたアーカイブを解凍してインストール

「imagick-php54-php53.tgz」を対応したツールで解凍すると「imagick-php54-php53.tar」になり、さらに解凍するとimagkckディレクトリの中にImageMagick-6.8.0-vc9、php53、php54ディレクトリが展開される。
imagick
├─ImageMagick-6.8.0-vc9  Windows向けランタイムファイル(DLL)
├─php53                  PHP 5.3向け
└─php54                  PHP 5.4向け

現在開発環境で使っているPHPは5.3.16 TS(thread-safe)版で、C:\Program Files (x86)\PHPディレクトリにインストールしている。php53ディレクトリにあるphp_imagick_ts.dllファイルと、ImageMagick-6.8.0-vc9ディレクトリを丸ごとC:\Program Files (x86)\PHP\extディレクトリにコピーする。

続いてphp.iniの編集。追加する内容は次の通りで、そのほかのエクステンションを記述している末尾に追加する。

[PHP_IMAGICK]
extension=php_imagick_ts.dll

なお青字の部分は、他のエクステンションの記述例に倣っただけなので、実際のところは不要である。

次に環境変数PATHに、imagickのWindows向けランタイムファイルのディレクトリ(ここではC:\Program Files (x86)\PHP\ext\ImageMagick-6.8.0-vc9)を追加する。環境変数の設定は、デスクトップの「コンピューター」を右クリックしてプロパティを選択。左上側の「システムの詳細設定」をクリックし、「環境変数(N)...」をクリックすればいい。

なお私のPCでは、VC9(Visual Studio 2008)のランタイムファイルがインストール済みだったため、説明を省いている。PCによってはこちらのインストールが必要になる。

imagickを確認

コマンドラインでPHPが動作できるようになっているなら、「コマンドプロンプト」を開き、次のコマンドを実行する。

C:\Users>php -i | find "imagick"
imagick
imagick module => enabled
imagick module version => @PACKAGE_VERSION@
imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator
imagick.locale_fix => 0 => 0
imagick.progress_monitor => 0 => 0

これまでの手順を正しく行って入れれば、このような表示になる。もしエラーになる場合は、PHPのバージョン、コピーしたパスの確認してほしい。

ApacheでPHPの設定変更を有効にするため、Apacheをリスタート。phpinfo関数を呼び出して、imagickが有効になっていることを確認する。

imagick

imagick moduleenabled
imagick module version @PACKAGE_VERSION@
imagick classes Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator
ImageMagick version ImageMagick 6.8.0-7 2012-11-23 Q16 http://www.imagemagick.org
ImageMagick copyright Copyright (C) 1999-2012 ImageMagick Studio LLC
ImageMagick release date 2012-11-23

イメージエディタでimagickが使えるか確認

PHPでimagickが動作していることが確認できたので、WordPressのイメージエディタでimagickが使えるか確かめてみる。確認方法としては、現在のテーマのfunctions.phpに次の内容を追記する。

$ie = wp_get_image_editor( 'C:\test.png' );
var_dump( get_class( $ie ) );

wp_get_image_editor関数のパラメータは、ここでは'C:\test.png'となっているが、この画像ファイルは実際に読み込みが行われるので、必ず実在する画像ファイルのパス名を指定すること。

実際にWebページにアクセスして、その結果を確認する。

string(18) "WP_Image_Editor_GD"

どうやらimagickは正しく認識されていない。理由を確認するため、トレースしてみると、/wp-includes/class-wp-image-editor-imagick.phpのtestメソッドにて、バージョンチェックしている部分で引っかかっていた。

if ( version_compare( phpversion( 'imagick' ), '2.2.0', '<' ) )
	return false;

phpinfoの結果でも確認できるように、phpversion関数で取得できる内容が'@PACKAGE_VERSION@'なっており、それがバージョンチェックで、2.2.0未満と判定されているようだ。

回避方法

とりあえずの回避方法は、2つある。1つは、先ほどのif文の2行をコメントアウトする方法。とても簡単な方法だが、システムのソースコードを修正してしまうので、WordPressのバージョンアップ時に注意が必要となる。

もう1つは、php_imagick_ts.dllのバージョン情報部分をバイナリエディタ等を使って書き換えてしまう方法である。実際に試したのは、

'@PACKAGE_VERSION@'
'3.1.0RCx         '
といった感じで、余った部分は半角スペースで埋めること。書き換えに失敗すると、正常に動作しなくなるので、その点は十分に注意してほしい。

このどちらの方法であっても、イメージエディタでimagickが有効になる。回避方法を対応して、Webページにアクセスした結果が次の内容である。

string(23) "WP_Image_Editor_Imagick"

GDよりもimagickが優先される

こんな感じでWindows環境でもイメージエディタでimagickが利用できるようになった。imagickとGDの両方がインストールされたPHP環境では、imagickが優先されるので、その点も覚えておきたいところである。

例によって、回避方法については自己責任で。


最終更新 : 2012年12月23日 10:40


お勧め

parse_blocks(2024年7月24日 更新)

array[] parse_blocks( string $content )
投稿コンテンツをパースする。

single_post_title(2012年9月6日 更新)

string single_post_title( [ string $prefix = '' [ , bool $display = true ] ] )
投稿ページのタイトルを表示する。

timer_stop(2021年7月23日 更新)

string timer_stop( [ int $display = 0 [ , int $precision = 3 ] ] )
タイマー開始時からの経過時間を取得する。

is_ssl(2022年7月2日 更新)

bool is_ssl( )
リクエストがSSLかどうか調べる。

wp_title_rss(2014年4月10日 更新)

void wp_title_rss( [ string $sep = '&#187;' ] )
フィード向けのページタイトルを出力する。