Windows10 + XAMPP 環境でImageMagickを使用する

この記事を試してみたくて、

compose.json

    "require": {
        "spatie/pdf-to-image": "^2.0.0"
    }

と記述してcomposer installしたところ、以下のようなエラーメッセージが出力されました。

> composer install

Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for spatie/pdf-to-image ^2.0.0 -> satisfiable by spatie/pdf-to-image[2.0.0].
    - spatie/pdf-to-image 2.0.0 requires ext-imagick * -> the requested PHP extension imagick is missing from your system.

  To enable extensions, verify that they are enabled in your .ini files:
    - PATH\TO\XAMPP\xampp\php\php.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

まあ、そうなるな……。

ImageMagickのダウンロード・配置

上述リンクから最新版と思しきImageMagick-7.0.7-11-vc15-x86.zipをダウンロード。

XAMPPは32bitなのでx86を選択。

ダウンロードして解凍したフォルダから、ImageMagick-7.0.7-11-vc15-x86\bin配下の.pdb以外のファイルを、PATH\TO\XAMPP\xampp\ImageMagick\bin\に配置(XAMPP直下にImageMagick、その下にbinフォルダをそれぞれ新規作成)。

ImageMagickのdllファイルをXAMPPにコピー
ImageMagickのdllファイルをXAMPPにコピー

imagickのダウンロード・配置

2番目に辿って行って最新版と思しきphp_imagick-3.4.4-7.4-ts-vc15-x86.zipをダウンロード。ちなみに

>php -i
phpinfo()
PHP Version => 7.4.3

## 略

ということで手元のXAMPPのPHPのバージョンは7.4系であることを確認済みでの判断です。

ダウンロードして解凍したフォルダから、以下の2つのコピーを行います

  1. ファイル名がCORE_RL_*.dllのものを上述の、PATH\TO\XAMPP\xampp\ImageMagick\bin\にコピー(上書き)
  2. php_imagick.dllPATH\TO\XAMPP\xampp\php\ext\にコピー
imagickのdllをXAMPPにコピー(ImageMagickのdllを上書き)
imagickのdllをXAMPPにコピー(ImageMagickのdllを上書き)
imagickのdllをXAMPPのphpにコピー
imagickのdllをXAMPPのphpにコピー

設定

php.iniで設定を記述。

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;

; If you wish to have an extension loaded automatically, use the following
; syntax:
;
;   extension=modulename
;
; For example:
;
;   extension=/path/to/extension/mysqli.so
;
; Note : The syntax used in previous PHP versions ('extension=<ext>.so' and
; 'extension='php_<ext>.dll') is supported for legacy reasons and may be
; deprecated in a future PHP major version. So, when it is possible, please
; move to the new ('extension=<ext>) syntax.

; 略

;extension=pgsql
;extension=shmop
extension=imagick ;追記

コメント部分に書いてありますが、please move to the new ('extension=<ext>) syntax.ということで、新しいPHPのバージョンだとphp_というプレフィックスは記述しなくて良い、とのことです。

最初、参考記事通りにextension=php_imagickと記述してphp -i | find "imagick"を実行したところ、

> php -i | find "imagick"
PHP Warning:  PHP Startup: Failed to load ext\php_imagick, 謖~~~縺帙s縲
 in Unknown on line 0
Warning: PHP Startup: Failed to load ext\php_imagick, 指定されたファイルが見つかりません。

と、エラーが出てしまいました。このエラー文についてはつい最近XAMPPのPHPのバージョンをアップグレードする ( 7.1.7 → 7.4.3 )で経験していたので、パスがおかしいということはすぐ気付けました。

次に、環境変数を追記。

環境変数に追記してパスを通す
環境変数に追記してパスを通す

PATH\TO\XAMPP\xampp\ImageMagick\bin

これでPCを再起動。

>php -i | find "imagick"
imagick
imagick module => enabled
imagick module version => 3.4.4
imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator, ImagickKernel
imagick.locale_fix => 0 => 0
imagick.progress_monitor => 0 => 0
imagick.skip_version_check => 0 => 0

OK、出ました。

これで、冒頭のcomposer installをもう一度試します。

> composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing spatie/pdf-to-image (2.0.0): Downloading (100%)
Writing lock file
Generating autoload files

完了しました!成功です。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。