気軽に手を出すべきでないImageMagick
今回ImageMagick導入のきっかっけは、とあるCGIの動作テストでした。
そのCGIの仕様書に「Image::Magick」が必要と記されていました。
「あーそういえばMovable Typeを使っていた遠い昔、そんな名前も聞いた気がするな…」程度の知識しかなかった私は軽い気持ちで調べ始めました。
とりあえず検索して見つかった「Image::Magick」を、インストールしてはエラーでやり直すという不毛な行為を繰り返しました。
このページはImageMagickとImage::Magick、またはPerlMagickというものについて基本的な知識を持っていなかった私の導入奮闘記です。
後続の方々が無用の手間をかけずに済むように情報をまとめました。
「ImageMagick」とは何か
まずは、知っているようで知らない「ImageMagick」について解説します。
「ImageMagick」は画像を編集するためのツールです。オープンソース(Apache 2.0ライセンス)で提供されています。
ImageMagickの高い汎用性
ImageMagickは魔法という名に恥じず、画像に関する幅広い用途に対応しています。
OSをまたいで様々なプラットフォームで動作します。それぞれのプラットフォームに合わせたImageMagickが存在します。
またPerlやPHP、Java、.NET(Windows)といった異なる言語で動作させることができます。
さらにImageMagickは画像の変換だけでなく、PostScript、EPS、SVG、PDFといった様々な形式にも対応しています。
以上のように高い汎用性を持っているため、サーバ上のディレクトリに保存した画像を自動で変換するといった変則的な使い方も可能です。
ざっくり「どんな環境でも利用できる画像編集ツール」と言えます。
convertからmagickへの変革
ImageMagickでは、実行に使用するソフトの名前が「convert(windowsではconvert.exe)」でした。
画像ファイルを変換するソフトとしてはまっとうな名前ですが、一点問題がありました。それはWindowには既存のコマンドとして「convert.exe」が存在してるということです。これはハードディスクの形式を変換するためのコマンドです。
そのため、WindowsではImageMagickをインストール後、ImageMagickのconvert.exeが優先して実行されるように環境変数へパスを通す必要がありました。
そこで、ImageMagick 7以降、convertというプログラム名は廃止されてmagickに変更になりました。
そのため、古いバージョンを想定したアプリの場合は適切に書き換えが必要になります。(Web上の多くの解説はconvertで解説されているので注意してください)
現在はconcertを使う6系と、magickを使う7系が並行して開発されています。
わかりにくいモジュール名と厳密な依存関係
これもImageMagickにありがちな問題です。この誤解の原因は、それぞれの言語で使われるツールやモジュール名が異なることに起因します。
例えばPHPのモジュール名は「imagick」。Perlの場合は「PerlMagick」。Javaの場合は「JMagick」。C++の場合は「Magick++」といった具合です。
これらのツールを意識せずに使っていると、ImageMagickの「convert」を利用してモジュールを実行しているという関係性が頭から抜け落ちがちです。
また、ImageMagickと、一連のツール群は厳密な依存関係が存在し、少しでもバージョンが異なると動作しません。ただでさえわかりにくいImageMagickとモジュールの関係に加え、依存関係も厳密とあれば、多くの利用者が混乱するのも頷けます。
悪いことに、それぞれのモジュールもサポートする言語のバージョンが細かく区切られています。
プラットフォームが異なれば、サポートされている言語のバージョンも異なります。そのため、同じアプリケーションをそのまま使うには、実行される環境を完全に一致させる必要があります。
しかしImageMagickのためだけに完全に同じ環境を構築するといった状況は少ないと思います。結局はそれぞれの環境に合わせて手直しをする必要があります。
ImageMagickを利用する際は、こうしたクロスプラットフォーム特有の制約もあることを理解してから導入しましょう。
インストーラー不在のImageMagick
これまで解説した通り、ImageMagickを導入するにはそれぞれの環境に合わせて依存関係を適切に判断する必要があります。
Linuxならyumなどのパッケージ管理システムが動作するため、コマンド一つで導入可能です。
しかしWindowsにはそうした仕組みは用意されておらず、インストーラーも存在しません。ではどうするかというと、自分で構築した開発環境に合わせてImageMagickと各モジュール、各モジュールと使用言語、といった依存関係を解決する必要があります。
つまり、多くの場合、ネット上に転がっているモジュールをダウロードしてインストールするだけでは動作しません。そのためソースからコンパイルする必要に迫られます。
このように考慮するべき問題が山盛りな状況のため、「気軽に手を出すべきではない」と記載しました。
ImageMagickをWindowsにインストールする方法
長々と失敗例を書いても仕方ないので成功例から紹介します。
前提としてWindows10にXAMPPを入れた環境でImageMagickをインストールする方法です。
Visual Studioのインストール
上で解説した通り、ImageMagickを環境に合わせて導入するにはソースからコンパイルする必要があります。コンパイルにはVisual Studioを使います。
現在の最新版はVisual Studio 2015のようです。
以下のページから無料の非商用版である「Visual Studio Community」を選択してインストーラーをダウンロードします。
https://www.visualstudio.com/downloads/
ダウンロードしたvs_community_JPN.exeを実行してください。
(全て完了するまでに30分ほどかかります。コーヒーでも飲んで待ちましょう。)
ImageMagickの導入
まずソースファイル込みのImageMagickをダウンロードします。
http://windows.php.net/downloads/pecl/deps/(注意!下のコラム参照)
今回ダウンロードしたのは「ImageMagick-6.9.3-10」です。
ダウンロードしたら適当な場所に解凍してください。
古いバージョンのImageMagickにはImageTragickという深刻な脆弱性があります。 これからダウンロードする方は以下のサイトで適切なバージョンのものを導入してください。 具体的には、6系なら6.9.4-0以上、7系なら7.0.1-2以上を利用してください。 ImageTragickの緊急対策が取られたため6.9.3でも「6.9.3-10」、7.0.1でも「7.0.1-1」は安全です。 http://www.imagemagick.org/download/
visualmagick configuration toolの実行
コマンドプロンプトで設定用の実行ファイルを起動します。
解凍した場所に移動して実行します。
# cd <解答した場所>ImageMagick-6.9.3-10\ImageMagick # configure.exe
mfc100u.dllが無いと言われる場合は、「Microsoft Visual C++ 2010 再頒布可能パッケージ」をインストールしてください。 今回は以下のものをインストール https://www.microsoft.com/ja-jp/download/details.aspx?id=8328 OSが64bit環境でも、XAMPPは32bitで実行されるためC++も32bit版を使用するので注意してください。
無事実行できると「welcome to the visualmagick configuration tool.」というウィンドウが起動します。
Dynamic(DLL)Buildsで
Dynamic Multi-threaded DLL runtimesを選択。
Build optionsで
Enable OpenMP(並列コンピューティング環境)
Exclude deprecated methods
Quantum depthでQ16
Visual Studio versionで2015
で「次へ」ボタンをクリック。
release directoryやDebug directoryはデフォルトで次へ、最後の確認も次へ。
すると以下の表示とともに、フォルダが作成されます。
作成されるフォルダ
<解凍したフォルダ>\ImageMagick-6.9.3-10\VisualMagick\
ImageMagickのWindowsの環境に合わせてコンパイル
早速Windows用にコンパイルといきたいところですが、このまま実行するとビルドに失敗します。
以下のファイルを開き、文字コードをUTF16にして保存してください。
<解凍したフォルダ>\imagemagick-6.9.3-10\pango\pango\pango-language-sample-table.h
こちらの情報に助けられました。
VS2015でImageMagickライブラリをビルド – Qiita
visualmagick configuration toolで作成されたフォルダ(
<解凍したフォルダ>\ImageMagick-6.9.3-10\VisualMagick\)を開きます。
フォルダの中にあるVisualDynamicMT.slnをVisual Studioで実行します。
初回は必要なライブラリをインストールするのに15分ほどかかります。
ライブラリのインストールが終わったら一度VSを再起動するほうが無難です。
起動したら構成マネージャでDebugからReleaseに変更。
ソリューションエクスプローラーでVisualDynamicMTを右クリックし、「ソリューションのビルド」を実行します。
コンパイルが終わるまで10分程度待ちます。(サードパーティのプラグイン等を求められた場合は別途インストールしてください)
ビルドが完了したら「C:\ImageMagick」を作成します。
続いて「<解凍したフォルダ>\ImageMagick-6.9.3-10\VisualMagick\」に作成された「lib」と「bin」を「C:\ImageMagick」へコピー。(pdbファイルは必要ありませんが、削除しないでも問題ありません)
続いて環境変数を開きます。
(Windowsを検索で「システム環境」と入力すると出ます。)
新規から、変数名に「MAGICK_HOME」、変数値に「C:\ImageMagick\bin」として「OK」ボタンをクリック。
続いてpathをダブルクリックして開き、先頭に「C:\ImageMagick\bin」を追加。
環境変数を編集したら、試しにコマンドプロンプトを管理者権限で実行して以下のコマンドで確認してみてください。
# cd C:\ImageMagick\bin # convert -version
以下のように表示されればImageMagick 6.9.3-10の設定は完了です。
Version: ImageMagick 6.9.3-10 Q16 x86 2016-11-04 http://www.imagemagick.org Copyright: Copyright (C) 1999-2015 ImageMagick Studio LLC License: http://www.imagemagick.org/script/license.php Visual C++: 190024215 Features: Cipher DPC Modules OpenMP Delegates (built-in): bzlib cairo flif freetype jng jp2 jpeg lcms lqr openexr pangocairo png ps rsvg tiff webp xml zlib
ちなみにImageMagick 7.0以降ではconvertではなく、magickへと変更になっています。具体的には以下のコマンドで確認できます。
# magick -version
XAMPPのPerlを削除してActivePerlをインストール
PerlMagickを開いてみると、require 5.002となっているように、Perlのバージョンが5.002以上でないと動作しません。現行のXAMPPでインストールされるPerlのバージョンは7.0.56なので必要条件を満たしています。 ところが私の環境ではさまざまな検証をする中で、Perlをインストールし直しました。普通であればこの作業は必要無いとは思いますが、作業手順ということで残しておきます。
まず「c:\xampp\perl」のフォルダを削除します。(別の場所にインストールした場合は適宜読み替えてください。不安な方はどこか適当な場所にバックアップしておいてください)
続いて以下のサイトで32bit(x86)版のActivePerlをダウンロードしてください。(Windows版のXAMPPでは32bit版なので注意)
インストーラーを起動して、次へで進み、Choose Setup Typeでcustomをクリック。
activeperlの項目のlocationを「c:\xampp\perl」としてインストールします。(location設定画面はスクショし忘れました)
このままだとローカルとサーバ側でシパンを書き換える必要があるため、シンボルリンクを作成します。
コマンドプロンプトを管理者権限で実行し、以下のコマンドを実行してください。(サーバの環境が異なる場合は適宜読み替えてください)
# cd / # mklink /D usr\local c:\xampp\perl
MinGWとdmakeのインストール
Perlの準備が整ったので、早速PerlMagickをコンパイルと行きたいところですが、ここで問題があります。
Windowsでコンパイル作業をするにはnmakeというコマンドを使うのが一般的なようです。しかし、上の工程でインストールしたActivePerlはgccで構築されています。そのためPerlのモジュールをMicrosoft Visual C++とNet-SNMPでビルドしようとすると失敗するとのこと。(実際nmakeでコンパイルしたモジュールは動作しませんでした)
そこで、gcc系のコンパイラをWindowsで実行することのできるMinGW(ミン・ジー・ダブリュー)とdmakeの出番です。
ActivePerlの導入後ならMinGWをppmでインストール可能と書かれた情報を目にしましたが、私の環境では「ppm install failed: Can’t find any package that provides MinGW」と出てインストールできませんでした。
そんなときは素直にインストーラーを使います。
https://sourceforge.net/projects/mingw-w64/
ページタイトルに「MinGW-w64 – for 32 and 64 bit Windows」とあるのでどちらにも対応しているようですね。
インストール時は32bitを選択してください。「i386, i686, x86」の表記が32ビットです。
またこの手のソフトにありがちですが、インストールするフォルダのパスにスペースや2バイト文字があると正しく動作しません。(インストールはできてもコマンドが失敗すること多数)
そのため、インストール先はCドライブ直下が無難です。私の場合は「C:\mingw-w64\x86_64-6.2.0-posix-seh-rt_v5-rev1」としました。
自動でパスも追加されると思いますが、環境変数のPathへ「C:\mingw-w64\x86_64-6.2.0-posix-seh-rt_v5-rev1」が追加されているか確認しておいてください。
dmakeのインストール
MinGWにデフォルトでdmakeはインストールされていないので、追加する必要があります。
まずはdmakeの32bitバージョンをダウンロード
http://strawberryperl.com/package/kmx/32_tools/32bit_dmake-4.12.2-bin_20140810.zip
解凍して「c\bin」と「startup」を以下のフォルダへ移動。
C:\mingw-w64\i686-6.2.0-posix-dwarf-rt_v5-rev1\mingw32\bin\
PerlMagickのインストール
必要なソフトが揃ったので、PerlMagickをコンパイルしてインストールします。
まずはフォルダを移動。
# cd <解凍したフォルダ>ImageMagick-6.9.3-10\ImageMagick\PerlMagick
続いてMakefileを作成します。Makefileは様々な種類のものが用意されていますが、拡張子が「nt」のものを利用します。
# perl Makefile.nt
無事「Makefile」が作成できたらインストールです。
# dmake install Skip blib\lib\Image\Magick.pm (unchanged) Running Mkbootstrap for Magick () "C:\xampp\perl\bin\perl.exe" -MExtUtils::Command -e chmod -- 644 "Magick.bs" "C:\xampp\perl\bin\perl.exe" -MExtUtils::Command::MM -e cp_nonempty -- Magick.bs blib\arch\auto\Image\Magick\Magick.bs 644 C:\MINGW-~1\I686-6~1.0-P\mingw32\bin\\gcc.exe -c -I.. -I..\xlib\include -s -O2 -DWIN32 -DPERL_TEXTMODE_SCRIPTS -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2 -DVERSION=\"6.93\" -DXS_VERSION=\"6.93\" "-IC:\xampp\perl\lib\CORE" -D_VISUALC_ -D_WINDOWS Magick.c In file included from ../magick/MagickCore.h:71:0, from Magick.xs:60: ../magick/method-attribute.h:49:13: note: #pragma message: MagickCore lib DLL import interface # pragma message( "MagickCore lib DLL import interface" ) ^~~~~~~ ../magick/method-attribute.h:75:12: note: #pragma message: MagickCore module DLL export interface # pragma message( "MagickCore module DLL export interface" ) ^~~~~~~ C:\MINGW-~1\I686-6~1.0-P\mingw32\bin\\g++.exe Magick.def -o blib\arch\auto\Image\Magick\Magick.dll -mdll -s -static-libgcc -static-libstdc++ -L"C:\xampp\perl\lib\CORE" -L"C:\MinGW\i686-w64-mingw32\lib" Magick.o "C:\xampp\perl\lib\CORE\libperl524.a" "C:\Users\hoge\Desktop\ImageMagick-6.9.3-10\VisualMagick\lib\CORE_RL_magick_.lib" -Wl,--enable-auto-image-base "C:\xampp\perl\bin\perl.exe" -MExtUtils::Command -e chmod -- 755 blib\arch\auto\Image\Magick\Magick.dll Files found in blib\arch: installing files in blib\lib into architecture dependent library tree Installing C:\xampp\perl\site\lib\auto\Image\Magick\Magick.dll Installing C:\xampp\perl\html\site\lib\Image\Magick.html Installing C:\xampp\perl\site\lib\auto\Image\Magick\autosplit.ix Installing C:\xampp\perl\site\lib\Image\Magick.pm Appending installation info to C:\xampp\perl\lib/perllocal.pod
以上のようなメッセージが流れれば成功です。
installingの部分を見れば分かる通り、Imagemagickを使うのに必要なモジュールがXAMPPのPerlにインストールされています。
PerlMagickの動作確認
使い方は公式の解説を見てください。様々な機能があることがわかります。
また、以下のサイトは丁寧に解説されているのでおすすめです。
Perl::ImageMagickでよく使うコマンドとサンプル | くろひつじのメモ帳
上のサイトのコードをお借りして動作確認を行います。
とりあえず適当な場所に「test.cgi」というファイルを作り、以下のように書いてください。
#!/usr/bin/perl use Image::Magick; $filename = "./image.jpg"; #読み込むファイル名 my $image = Image::Magick->new; $image->Read("$filename"); $image->OilPaint(radius => 4); print ("Content-type: image/jpeg\n\n"); #表示する画像ヘッダー binmode STDOUT; $image->Write("jpeg:-"); print "\n\n"; undef $image; exit();
つづいて上のファイルと同じフォルダに「image.jpg」という名前の適当な画像を用意しましょう。
あとは上のcgiにアクセスすれば、画像が絵画風になっていると思います。
radius => 4の値を変えれば、フィルターの半径を変更できます。(大きい数字にすると処理が重いので注意)
おつかれさまでした。
長丁場になりましたがWindowsにImageMagickをインストールし、PerlMagickで画像を変換するまでの解説は終了です。
今回の経験からImageMagickの依存関係の厳密さを思い知りました。今回は必要に迫られて導入しましたが、はっきり言って二度と手を出したくありませんw
できればソースファイルからコンパイルではなく、インストーラーでサクッとインストールする仕組みがほしいところです。オープンソースでありながら、これだけ多機能なソフトですが、Windowsではイマイチ人気が無いのは、導入の困難さに起因していると思われます。
その点、Linux等はyumを利用すれば依存関係は一発で解決してくれるので、導入はコマンド一発です。
エラー集
今回のImageMagick導入にあたり、たくさんのエラーを体験しました。
そのたびにネット上の有益な情報によって助けられました。
同じエラーに苦しんでいる方のためにエラーと対処法を残しておきます。
XAMPPに64bit版のActivePerlをインストール時のエラー
Can't load 'C:/usr/local/lib/auto/Image/Magick/Magick.dll' for module Image::Magick: load_file:%1 は有効な Win32 アプリケーションではありません。 at C:/usr/local/lib/DynaLoader.pm line 190, <DAT> line 1. at ./lib/thumb.pl line 9. Compilation failed in require at ./lib/thumb.pl line 9, <DAT> line 1. BEGIN failed--compilation aborted at ./lib/thumb.pl line 9, <DAT> line 1. For help, please send mail to the webmaster (postmaster@localhost), giving this error message and the time and date of the error.
対処法
XAMPPは32bitバージョンしかないので、PHPだけ64bitだとエラーが出る。
よってインストールするべきは32bit版。
CGI実行時のエラー
Apacheのエラーログ
[Wed Oct 26 17:21:34.320359 2016] [cgi:error] [pid 7152:tid 1952] (OS 2)指定されたファイルが見つかりません。 : [client ::1:49555] couldn't create child process: 720002: joyful.cgi [Wed Oct 26 17:21:34.320359 2016] [cgi:error] [pid 7152:tid 1952] (OS 2)指定されたファイルが見つかりません。 : [client ::1:49555] AH01223: couldn't spawn child process: C:/xampp/htdocs/xampp/aquarium/up/joyful.cgi
対処法
Perlのシパン(パスの指定)がサーバと異なるため起こるエラー。
コマンドプロンプトを管理者権限で実行する。
# cd / # mklink /D usr\local c:\xampp\perl
CGI実行時のエラーその2
ブラウザで表示されるエラーメッセージ。
Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator at postmaster@localhost to inform them of the time this error occurred, and the actions you performed just before this error. More information about this error may be available in the server error log. Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
Apacheのエラーログ
[Fri Oct 28 00:24:45.827598 2016] [cgi:error] [pid 12328:tid 1952] [client ::1:59428] AH01215: [Fri Oct 28 00:24:45 2016] regist.cgi: [Fri Oct 28 00:24:45 2016] regist.cgi: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at ./lib/jcode.pl line 684.\r: <スクリプト名>, referer: <スクリプト名>
解決法
以下のサイトで解説されています
http://icepotato.cocolog-nifty.com/blog/2014/04/jcodepldefinedh.html
より
/lib/jcode.pl line 684辺りを修正。
;# Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at ./lib/jcode.pl対策 ;# ;# sub z2h_euc { ;# local(*s, $n) = @_; ;# &init_z2h_euc unless defined %z2h_euc; ;# $s =~ s/($re_euc_c|$re_euc_kana)/ ;# $z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1 ;# /geo; ;# $n; ;# } ;# ;# sub z2h_sjis { ;# local(*s, $n) = @_; ;# &init_z2h_sjis unless defined %z2h_sjis; ;# $s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo; ;# $n; ;# } ;# sub z2h_euc { local(*s, $n) = @_; &init_z2h_euc if !%z2h_euc; $s =~ s/($re_euc_c|$re_euc_kana)/$z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1/geo; $n; } sub z2h_sjis { local(*s, $n) = @_; &init_z2h_sjis if !%z2h_sjis; $s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo; $n; }
nmake実行時のエラー
以下のコマンドで起こるエラー。
# nmake install
to undefined at C:/xampp/perl/lib/ExtUtils/Install.pm line 1198.
NMAKE : fatal error U1077: 'C:\xampp\perl\bin\perl.exe' : リターン コード '0x2'
Stop.
ActivePerlはgccで構築されており、PerlのモジュールをMicrosoft Visual C++とNet-SNMPでビルドしようとすると失敗するとのこと。
対処法
上の解説にあるようにdmakeを使うことでコンパイルできるようになる。
ppmでMinGWをインストール時のエラー
ppmで追加可能という情報があったが、現状では見つからないと出る。
# ppm install MinGW
ppm install failed: Can't find any package that provides MinGW
対処法
素直にインストーラーをダウンロードしてインストールする。
適切なRepositoryをppmに追加することで可能との情報もあったが面倒なので検証せず。
ppmでインストールしたdmake実行時のエラー
# perl Makefile.nt # dmake install Skip blib\lib\Image\Magick.pm (unchanged) Running Mkbootstrap for Magick () "C:\xampp\perl\bin\perl.exe" -MExtUtils::Command -e chmod -- 644 "Magick.bs" "C:\xampp\perl\bin\perl.exe" -MExtUtils::Command::MM -e cp_nonempty -- Magick.bs blib\arch\auto\Image\Magick\Magick.bs 644 c -I.. -I..\xlib\include -s -O2 -DWIN32 -DPERL_TEXTMODE_SCRIPTS -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2 -DVERSION=\"6.93\" -DXS_VERSION=\"6.93\" "-IC:\xampp\perl\lib\CORE" -D_VISUALC_ -D_WINDOWS Magick.c 'c' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 link -out:blib\arch\auto\Image\Magick\Magick.dll -mdll -s -static-libgcc -static-libstdc++ -L"C:\xampp\perl\lib\CORE" -L"C:\MinGW\i686-w64-mingw32\lib" Magick.o "C:\xampp\perl\lib\CORE\libperl524.a" "C:\Users\hoge\Desktop\ImageMagick-6.9.3-10\VisualMagick\lib\CORE_RL_magick_.lib" -def:Magick.def Microsoft (R) Incremental Linker Version 14.00.24215.1 Copyright (C) Microsoft Corporation. All rights reserved. LINK : warning LNK4044: オプション '/mdll' は無効です。無視されます。 LINK : warning LNK4044: オプション '/s' は無効です。無視されます。 LINK : warning LNK4044: オプション '/static-libgcc' は無効です。無視されます。 LINK : warning LNK4044: オプション '/static-libstdc++' は無効です。無視されます 。 LINK : warning LNK4044: オプション '/LC:\xampp\perl\lib\CORE' は無効です。無視されます。 LINK : warning LNK4044: オプション '/LC:\MinGW\i686-w64-mingw32\lib' は無効です 。無視されます。 LINK : fatal error LNK1181: 入力ファイル 'Magick.o' を開けません。 dmake.exe: Error code 157, while making 'blib\arch\auto\Image\Magick\Magick.dll'
対処法
gcc系のライブラリが別途必要だが、ppmではインストールされていない。ライブラリが足りないため起こるエラー。
MinGWにdmakeを導入することでも問題なくコンパイルできるようになる。
MinGWのdmake実行時のエラー
dmake: Error: -- Configuration file `C:\ (x86)\mingw-w64\i686-6.2.0-posix-dwarf-rt_v5-rev1\mingw32\bin\startup\startup.mk' not found
対処法
パスにスペースや2バイト文字が入るとエラーで実行できない。
MinGWのインストール先をC直下などに移動する。
php_imagick.dll導入時のエラー
以下error.logの例
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\xampp\\php\\ext\\php_imagick.dll' - \xef\xbf\xbdw\xef\xbf\xbd\xe8\x82\xb3\xef\xbf\xbd\xea\x82\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdW\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd[\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xc2\x82\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xdc\x82\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdB\r\n in Unknown on line 0
対処法
PHPのバージョンに適応したバージョンを導入する。
(ImageMagickとモジュールの依存関係は厳密なため、適応するバージョンのモジュールにあわせてImageMagickからインストールし直す必要あり)