Monday, April 28, 2008

WindowsでImageMagickをPHPから使用するための設定

WindowsでImageMagickをPHPから使用するためには、以下の設定を行います。

環境
Apache 2.2.8/PHP5.2.5/ImageMagick6.4.0

1. ImageMagickをインストール。Program Files配下などのスペースを含むパスにインストールしないこと。(例:c:\ImageMagick640Q16など)

2. Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86)のインストール
http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=ja
上記URLからダウンロードして、インストール。

3.php_imagickのインストール
以下のURLのMikko's blogからphp_imagick_dyn-Q16.dllをダウンロード。
http://valokuva.org/?page_id=50
php_imagick_dyn-Q16.dllをPHPのextディレクトリにコピー。

4. php.iniに以下の設定を追加(パスは環境に合わせて変更してください)
extension_dir = "C:\PHP525\ext"
extension=php_imagick_dyn-Q16.dll

5. OSのシステム環境変数にMAGICK_HOMEという環境変数名で
ImageMagickをインストールしたパスを指定。(例:C:/ImageMagick640Q16)

6. Windowsを再起動。

7. 以下のPHPファイルを作成し、ブラウザからアクセス。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja" dir="ltr">
<head>
<title>sample372</title>
</head>
<body>
<?php
$first = new Imagick('sf.jpg');
$second = new Imagick('sample3b.jpg');
$first->compositeImage($second, Imagick::COMPOSITE_DEFAULT, 10, 10);
$first->writeImage('sample372a.jpg');
?>

<img src="sample372a.jpg" />
</body>
</html>

元画像1(sf.jpg)


元画像2(sample3b.jpg)


出力画像(sample372a.jpg)


2009/05/04追記
「Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ」は「Microsoft Visual C++ 2008 Redistributable」でも動作する。
動作環境
Microsoft Windows 2003 Server SP2, Apache2.2.11, PHP5.2.9-2, ImageMagick6.5.2-0


2010/08/05追記
以下のページのDLLを使用して、XAMPP1.7.3でも動作する。
http://www.sk89q.com/2010/03/vc6-windows-binaries-for-imagick-2-3-0/
動作環境
Microsoft Windows 2003 Server SP2, XAMPP 1.7.3, ImageMagick6.6.3-2-Q16

5 comments:

Unknown said...

初めまして。

こちらの記事を参考にImageMagickを入れ
サンプルを試してみたところ、「Fatal error: Class 'Imagick' not found in」のエラーが返ってきます。
いろいろ原因など調査したのですが、わからずじまいです。

こちらの記事に書かれている以外で必要な事はありますでしょうか?

PHP Version 5.2.9-1
ImageMagick 6.5.2 Q16

上記の環境でやっております。

何卒、宜しくお願い致します。

kyle said...

裕太様

以下の場合、'Imagick' not foundエラーがでます。
・ImageMagickをProgram Files配下にインストールした。
・php_imagick_dyn-Q16.dllをextディレクトリにコピーしていない
・php.iniのextension_dirディレクトリが異なる、extension=php_imagick_dyn-Q16.dllを指定していない。
・システム環境変数MAGICK_HOMEのパスが間違っている。
・OSの再起動をしていない

Unknown said...

kyle様

ご返答有り難う御座います。

解決致しました。

phpの設定でミスがありモジュールファイル自体が読み込めていなかったです。

お手数掛けまして申し訳御座いません。

迅速な返答、誠に有り難う御座いました。

ふじけん said...

参考にさせてもらい、なんとかインストールできました。
しかしphpinfoにもimagickが表示されているのですが、上記のサンプルはできず、なぜかファイルをダウンロードしようとします。(試しにダウンロードしたところ、ファイルはこのファイル名と同じもので中身はありませんでした)

私には原因がわからないので、よろしければご教授お願いいたします。

xampp
PHP Version 5.3.1
imagick module version 2.3.0

kyle said...

Kentarow様

以下のページのDLLを使用して、
http://www.sk89q.com/2010/03/vc6-windows-binaries-for-imagick-2-3-0/

以下のコードのように、画像ファイルへのフルパスを指定した場合はどうなりますでしょうか。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja" dir="ltr">
<head>
<title>sample372</title>
</head>
<body>
<?php
$first = new Imagick('C:\xampp\htdocs\sf.jpg');
$second = new Imagick('C:\xampp\htdocs\sample3b.jpg');
$first->compositeImage($second, Imagick::COMPOSITE_DEFAULT, 10, 10);
$first->writeImage('C:\xampp\htdocs\sample372a.jpg');

?>

<img src="sample372a.jpg" />
</body>
</html>