XAMPP に ImageMagick をインストールする方法【2023年改訂版】

以前に「XAMPP に ImageMagick をインストールする方法」という記事を書いていたのですが、 最近いろいろと調べていくうちにその記事に少し誤りがあったことが判明したので、 その訂正と公式ではまだサポートされていない PHP 8.2、PHP 8.3 にインストールする方法を記載したいと思います。

そもそもの誤り

以前の記事では、ImageMagic 本体を別途インストールする必要があると書いていたのですが、 実は imagick のパッケージには PHP 拡張用の DLL と、ImageMagic 本体用の DLL の両方が含まれており、 ImageMagic 本体を別途インストールせずとも、imagick に付属している DLL に PATH を通すと動きます。 imagick に同梱されている ImageMagic 本体用の DLL を使用すれば、imagick とのバージョンの違いも発生しなくなります。 そのため、ImageMagic 本体を別途インストールするのではなく、同梱の DLL を使った方が良いです。 ということで、それを前提に改めてインストール方法をまとめてみます。

imagick をダウンロードする

上述の通り、imagick のパッケージには、PHP 拡張用の DLL(php_imagick.dll)と、 ImageMagic 本体用の DLL(CORE_~.dll や IM_~.dll など) の両方が含まれていますので、 まずは imagick のパッケージをダウンロードしましょう。

PHP 8.1 以下の場合

現在のところ公式の PECL では、PHP 8.1 まで対応されていますので、PECL の公式サイトからダウンロードできます。 ダウンロードする DLL ファイルは、インストールする環境の PHP によって異なりますので、環境に合わせて選択してください。 phpinfo() を表示して確認しましょう。 「Architecture」欄や「PHP Extension Build」欄を見れば、どの DLL ファイルをダウンロードすれば良いかわかると思います。

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

PHP 8.2、PHP 8.3 の場合

現在のところ公式の PECL では、PHP 8.2、PHP 8.3 は対応されていません。 しかしながら、GitHub 上では有志の方々が PHP 8.2 と PHP 8.3 用にビルドしてくれています。 とはいえ非公式のビルドとなりますので、ご自身の責任で使用してください。 本番環境などでは使用しないようにしましょう。 もし公式で対応されればそちらを使用するようにしましょう。

ImageMagic 本体用の DLL に PATH を通す

imagick のパッケージをダウンロードして解凍したら、そのフォルダをどこか邪魔にならないディレクトリへ移動させます。 場所はどこでも良いのですが(PATH を通すので)、この記事では XAMPP の php の ext フォルダに入れることにします(例:"C:\xampp\php\ext\php_imagick-3.7.0-8.1-ts-vs16-x64")。

次に、PHP 拡張用の DLL(php_imagick.dll)から ImageMagic 本体用の DLL を読み込めるようにするために PATH を通す必要があります。 環境変数は「設定>システム>詳細情報>システムの詳細設定>環境変数」から変更できます。 環境変数の PATH に、そのディレクトリのパスを追加します。 追加できたら Windows を再起動して反映させます。

path1.png path2.png

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

次は PHP の設定です。 PHP 拡張用の DLL(php_imagick.dll)を読み込めるように設定します。

PHP 拡張用の DLL を移動させる

imagick のパッケージの中にある PHP 拡張用の DLL(php_imagick.dll)を、 XAMPP の PHP の ext ディレクトリ(例:"C:/xampp/php/ext")に持っていきます。

php_imagick1.png

PHP 8.2、PHP 8.3 用の非公式ビルドを使用している場合

PHP 8.2、PHP 8.3 用の非公式ビルドを使用している場合は、 TS(Thread Safe)版と NTS(Non Thread Safe)版でファイル名が異なりますので、 使用する方のファイルを移動させて、ファイル名を "php_imagick.dll" に変更します。

TS(Thread Safe)版 php_imagick_ts.dll
NTS(Non Thread Safe)版 php_imagick_nts.dll
php_imagick2.png

php.ini を変更する

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

php.ini
extension=imagick

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

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

「Imagick compiled with ImageMagick version」の欄が imagick の想定している ImageMagick のバージョンで、 「Imagick using ImageMagick library version」の欄が ImageMagick 本体の 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;

2024/03/11 追記:DLL が読み込めない場合

DLL のパスは正しいのに DLL が読み込めない現象が発生する場合があります。 php -v コマンドを実行した際に下記のような Warning が出る場合は、 DLL が読み込めていません。

PHP Warning:  PHP Startup: Unable to load dynamic library 'imagick' (tried: C:\xampp\php\ext\imagick (指定されたモジュールが見つかりません。), C:\xampp\php\ext\php_imagick.dll (指定されたモジュールが見つかりません。)) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'imagick' (tried: C:\xampp\php\ext\imagick (指定されたモジュール が見つかりません。), C:\xampp\php\ext\php_imagick.dll (指定されたモジュールが見つかりません。)) in Unknown on line 0

これはおそらく Windows に Visual C++ 2019 の再頒布パッケージが含まれていないことが原因だと思われます。 この再頒布パッケージは、いろいろなアプリで使用されているので、 Windows を長期間使用していると知らず知らずのうちにインストールされていることが多いと思うのですが、 Windows をクリーンインストールしたりすると、この再頒布パッケージがインストールされていない状態になってしまい、エラーになってしまうようです。 例えば、Windows 11 をクリーンインストールした直後などに発生します。

ということで、Visual C++ 2019 の再頒布パッケージをインストールしましょう。 Visual C++ 2019 の再頒布パッケージは、現在は Visual C++ 2015 ~ 2022 までのまとまったパッケージとして配布されているので、それをインストールしましょう。

手動でインストールする

最新の再頒布パッケージは下記のページからダウンロードできます。

redist.png

winget でインストールする

winget コマンドを使うと簡単にインストールできます。

winget install --id Microsoft.VCRedist.2015+.x64

参考サイト

関連記事

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

記事検索

最新記事

人気記事

RSSフィード

フィードバック

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

匿名でフィードバックする
匿名でフィードバックする

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

なお、このフォームから入力された内容について、管理者から返信はできませんので注意してください。 もし、管理者からの返信が必要であれば、X(旧 Twitter) もしくは、お問い合わせより、お願いします。