XAMPP に ImageMagick をインストールする方法

NEW
2021/10/30

XAMPP に ImageMagick をインストールする方法がかなりわかりづらく混乱してしまったので、ここにインストール方法を記載しておきます。 自分への備忘録です。ImageMagick は脆弱性が多いようなので注意。

PHP から ImageMagick を使用するには

PHP から ImageMagick を使用するには2つのものが必要です。
1つ目は、コマンドラインツールである ImageMagick 本体。
2つ目は、PHP の拡張(エクステンション)である imagick です。

imagick は PHP から ImageMagick を呼び出すための橋渡し(Wrapper)の役割なのですが、本体と橋渡しの2つに分かれていることで問題が発生します。 それは、最新の ImageMagick のバージョン(例:7.1.0-13)と、imagick が想定している ImageMagick(例:7.0.7-11)のバージョンが異なっているということです。 imagick が想定している ImageMagick のバージョンは少し古いバージョンなのです。

バージョンが異なっていても動作はするようですが、安定性の問題が発生することがわかっているため、非推奨となっておりサポートされていません。 そのため、imagick の想定するバージョンと一致する古いバージョンの ImageMagick を使用する必要があります。

Windows に ImageMagick をインストールする

古い ImageMagick をインストールする方法

まずは正攻法である、ImageMagick と imagick のバージョンをちゃんと合わせる方法です。 imagick が想定する古いバージョンの ImageMagick は、https://windows.php.net/downloads/pecl/deps/ からダウンロードできます。 pecl に依存するものをちゃんと保持してくれているんですね。ありがたい。 ちなみにこのファイル名の "7.0.7-11" というのは ImageMagick のバージョン番号であり、PHP のバージョン番号ではないので注意。 deps.png

ダウンロードしたら解凍してどこか邪魔にならないディレクトリへ移動させます(例:"C:\Program Files\ImageMagick-7.0.7-11-vc15-x64")。 場所はわかればどこでも良いです(PATHを通すので)。これが ImageMagick 本体です。

次に、その ImageMagick の "bin" ディレクトリへPATHを通し、コマンドラインから使えるようにします。 環境変数は「設定>システム>詳細情報>システムの詳細設定>環境変数」から変更できます。 環境変数のPATHに ImageMagick の "bin" ディレクトリのパスを追加します(例:"C:\Program Files\ImageMagick-7.0.7-11-vc15-x64\bin")。

path1.png path2.png

最新の ImageMagick をインストールする方法

開発環境だから ImageMagick と imagick の多少のバージョン違いなんて気にしないぜ!安定性なんてお構いなし!という場合は、最新の ImageMagick を使うのも良いでしょう。 最新の ImageMagick を使った方がインストールが簡単です。 インストーラーが全部やってくれます。

公式サイトのダウンロードページから Windows 用のインストーラーをダウンロードし、インストールします。

imagemagick_download.png

インストーラー(.exe)に従ってインストールすれば特に迷うこともないかと思いますが、 オプションを選択する際に、「Add application directory to your system path」のチェックは必ずつけてください。 これは環境変数のPATHに ImageMagick の "bin" ディレクトリを追加するオプションです。 これを選択しておかないとPHPから使用できないので注意してください。

imagemagick_install.png

インストールできたか確認する

ImageMagick をインストールすると、magick コマンドが使えるようになっていますので、使用できるか確認してみましょう。 ちゃんとPATHが通っていれば使えるはずです。 環境変数のPATHの設定をちゃんと反映されていない場合は Windows を再起動してみましょう。

magick -version
出力内容
Version: ImageMagick 7.0.7-11 Q16 x64 2017-11-23 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2015 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Visual C++: 191125547
Features: Cipher DPC HDRI Modules OpenMP
Delegates (built-in): bzlib cairo flif freetype jng jp2 jpeg lcms lqr openexr pangocairo png ps raw rsvg tiff webp xml zlib

PHP に imagick をインストールする

ImageMagick 本体のインストールが完了したら、次は imagick です。 PHP から ImageMagick を使用するには PHP の拡張(エクステンション)である imagick が必要です。 imagick は PHP から ImageMagick を呼び出すための橋渡し(Wrapper)の役割になります。 本体はあくまで、上記でインストールした ImageMagick になります。

https://pecl.php.net/package/imagick

imagick をインストール

imagick は PHP の拡張(エクステンション)なので、DLL ファイルです。 ダウンロードする DLL ファイルは、インストールする環境の PHP によって異なりますので、環境に合わせて選択してください。 phpinfo() で確認しましょう。「Architecture」欄や「PHP Extension Build」欄を見れば、どの DLL ファイルをダウンロードすれば良いかわかると思います。

phpinfo1.png
https://pecl.php.net/package/imagick
pecl1.png pecl2.png

ダウンロードしたら解凍して、その中にある "php_imagick.dll" ファイルを、XAMPP の PHP の ext ディレクトリ(C:/xampp/php/ext)に持っていきます。

php_imagick.png

次に、先ほど ext ディレクトリに追加した "php_imagick.dll" ファイルを PHP が読み込むように php.ini ファイル(C:/xampp/php/php.ini) に追記し、Apache を再起動します。

php.ini
extension=imagick

インストールできたか確認する

phpinfo() を表示し、imagick の項目が表示されていればインストール完了です。 ImageMagick 本体と imagick の両方のインストールが完了していなければ表示されないので注意してください。

「Imagick compiled with ImageMagick version」の欄が imagick の想定している ImageMagick のバージョンで、 「Imagick using ImageMagick library version」の欄が現在インストールされている ImageMagick のバージョンです。 この2つが一致しているか確認しましょう。

開発環境でバージョン合わせるのなんてめんどくせー!安定性なんて無視だぜ!って人は一致してなくても良いです。 違ってても動作はするようです。

phpinfo2.png

PHPから使用する

Imagick クラスが、PHPの組み込みのクラスとして使用できるようになってます。

PHP
<?php
$imagick = new Imagick(__DIR__ . '/image.jpg');
$imagick->thumbnailImage(100, 0);

header('Content-type: image/jpeg');
echo $imagick;

参考サイト

関連記事

最近のWebアプリでは、キャッシュやセッションを保存する際に、Redis がよく使われていたりします。しかしながら Redis は XAMPP には含まれていないため、XAMPP から Redis を使うにためには XAMPP の環境に少し手を加える必要があります。そこで、その手順を記載しておきます。いまさら感も多々あ ...
XAMPP 環境にて作業を行っていたところ、MySQL 接続がやたらと遅く辟易したため、原因を調査してみた。少々ハマってしまったので、ここに書いておきます。誰かの役に立てば幸いだ。ことの発端現象現象としては、PHP から MySQL への接続に1秒以上かかるというもの。ソースコードは下記のたった1行のみ。PHPmysq ...
XAMPPで開発する際に、PHPのメール送信関数 mail() もしくは mb_send_mail() を使うと、エラーが出てしまい困ることがあります。ちゃんとメールサーバーの設定をすれば良いじゃないかと思うかもですが、メールサーバーを用意するのは面倒ですし、実際にメールが外部に送信されてしまってもそれはそれで困りもの ...

記事検索

最新記事

RSSフィード