RMagicライブラリーの導入方法
以前のブログ「rubyXLを使用したExcel操作」で、画像情報を抽出して Excelに書き出すのに RMagickを使用していることを書きました。
RMagickとは、ImageMagickを Rubyで扱えるようにした gemであり、Ruby用のImageMagickインターフェースといったところです。
ImageMagickとは、コマンドラインから画像処理を可能にするツールです。多くの画像ファイル形式に対応しており、サイズの変更や画像の合成、画像の分析、画像の作成などができます。
RMagickの説明は、以下のページに書かれています。
今回 Windows 10環境に RMagickを再導入した時に苦労したので、記録しておきます。
RMagic導入時のエラー
単純に RMagickを gemコマンドで導入しただけでは、エラーになって導入できません。
4.2.2の場合
バージョンの指定をせずに導入しようとすると、バージョン 4.2.2 の RMagickが選択されますが、以下のようなエラーになります。
C:\Ruby26-x64>gem install rmagick Fetching rmagick-4.2.2.gem Temporarily enhancing PATH for MSYS/MINGW... Building native extensions. This could take a while... ERROR: Error installing rmagick: ERROR: Failed to build gem native extension. current directory: C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rmagick-4.2.2/ext/RMagick C:/Ruby26-x64/bin/ruby.exe -I C:/Ruby26-x64/lib/ruby/2.6.0 -r ./siteconf20210825-19420-yvfc13.rb extconf.rb checking for Ruby version >= 2.3.0... yes checking for magick... no checking for identify... no *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=C:/Ruby26-x64/bin/$(RUBY_BASE_NAME) extconf.rb:373:in `magick_command': no executable found for ImageMagick (NotImplementedError) from extconf.rb:301:in `assert_has_dev_libs!' from extconf.rb:267:in `assert_can_compile!' from extconf.rb:18:in `initialize' from extconf.rb:398:in `new' from extconf.rb:398:in `main' To see why this extension failed to compile, please check the mkmf.log which can be found here: C:/Ruby26-x64/lib/ruby/gems/2.6.0/extensions/x64-mingw32/2.6.0/rmagick-4.2.2/mkmf.log extconf failed, exit code 1 Gem files will remain installed in C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rmagick-4.2.2 for inspection. Results logged to C:/Ruby26-x64/lib/ruby/gems/2.6.0/extensions/x64-mingw32/2.6.0/rmagick-4.2.2/gem_make.out
2.16.0の場合
そこで、以前導入していたバージョン 2.16.0 を指定して導入しましたが、やはり以下のようなエラーになります。
c:\Ruby26-x64>gem install rmagick -v 2.16.0 Fetching rmagick-2.16.0.gem Temporarily enhancing PATH for MSYS/MINGW... Building native extensions. This could take a while... ERROR: Error installing rmagick: ERROR: Failed to build gem native extension. current directory: C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rmagick-2.16.0/ext/RMagick C:/Ruby26-x64/bin/ruby.exe -I C:/Ruby26-x64/lib/ruby/2.6.0 -r ./siteconf20210825-19444-1irh3v5.rb extconf.rb *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. ・・・
両方とも共通して、「Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers.」のエラーが出ています。そう言えば、使用しているパソコンが変わったので、ImageMagickが導入されていないことに気が付きました。
そこで、先ず ImageMagickを導入します。
ImageMagickの導入
以下のページを参考に、ImageMagickを導入します。
バージョンの選択
RMagickの現在最新のバージョンは 4.2.2 のようですが、以前は 2.16.0 を導入しました。記載したページでもバージョン 2.16.0 までなので、RMagickは再度バージョン 2.16.0 を導入することとし、結果として ImageMagickのバージョンは 6系を導入することにします。
ダウンロードと導入
ダウンロードから、インストールまでは、以下の流れでした。
ダウンロード
ImageMagick 6系をダウンロードするには、以下のページの、ImageMagick本家の binariesディレクトリ配下に置いてある古いバイナリを選びます。
Index of /ImageMagick/download/binaries
このページの中で、どのファイルを選択するか、以下の基準と稼働実績から決めた結果、「ImageMagick-6.9.12-20-Q16-x64-dll.exe」をダウンロードしました。
- dll版を使用する
- x64を選択する
- Q16を選択する
インストーラの実行
ダウンロードしたファイルをダブルクリックして、実行します。
ここから、導入画面が続きます。
「I accept the agreement」を選択して、「Next」をクリックします。
「Next」をクリックします。
導入ディレクトリーを変える必要がなければ、デフォルトのまま「Next」をクリックします。
スタート・メニューのフォルダー名を変える必要がなければ、デフォルトのまま「Next」をクリックします。
チェック・ボックスにチェックして導入する追加タスクを選択し、「Next」をクリックします。
デフォルトで、「Create a desktop icon」、「Add application deirector to your system path」、「Install FFmpeg」はチェックが付いていますが、必要に応じてはずしてください。ただ、「Add application deirector to your system path」、「Install development headers and libraries for C and C++」は、必ず選択します。
確認して問題が無ければ、「Install」をクリックして導入を開始します。
インストールが終了すると、インフォメーションが表示されるので、確認して「Next」をクリックします。
インストールが終了すると完了画面が出るので、デフォルトのまま「finish」をクリックします。ただし、リリース・ノートを見る必要がなければ、チェックを外しておきます。
導入確認
導入が完了したので、稼働確認してみます。以下のようにコマンドを打ってみました。
C:\WINDOWS\system32>cd C:\Program Files\ImageMagick-6.9.12-Q16\images C:\Program Files\ImageMagick-6.9.12-Q16\images>convert wizard: wizard.jpg C:\Program Files\ImageMagick-6.9.12-Q16\images>convert wizard.jpg win:
1行目で、ImageMagickを導入したディレクトリーに移動しています。そこへ移動しないと、「無効なパラメーターです - wizard.jpg」のようなエラーになりました。
2行目は、エラーにはならなかったのですが、何も表示されませんでした。
3行目は、ImageMagick Displayが立ち上がって、画像が表示されました。画像が表示されたので、導入は大丈夫だと思います。
環境変数の設定
RMagickコンパイル時、ImageMagickのインクルードファイルおよびライブラリファイルが見えるように、環境変数を設定します。
設定
「設定」→「システム」→「詳細情報」→「システムの詳細設定」→「環境変数」の順にクリックし、CPATHと LIBRARY_PATHを以下のように新規に設定します。
確認
コマンド・プロンプトで、設定されていることを確認します。
以上で、ImageMagickの導入は終了です。
RMagickの導入
準備が整ったので以下のコマンドを実行し、RMagick をインストールします。
gem install rmagick -v 2.16.0
導入
正常に導入されたようで、導入結果は以下のようになりました。
Temporarily enhancing PATH for MSYS/MINGW... Building native extensions. This could take a while... Successfully installed rmagick-2.16.0 Parsing documentation for rmagick-2.16.0 Installing ri documentation for rmagick-2.16.0 Done installing documentation for rmagick after 3 seconds 1 gem installed
導入確認
本当に正常に導入されたか、確認してみます。
gemの確認
先ずは、gemコマンドで確認します。以下のように、表示されます。
C:\DATA>gem list --local rmagick *** LOCAL GEMS *** rmagick (2.16.0)
稼働確認
次に、稼働を確認してみましたが、以下のようなエラーとなり稼働しません。
ここで、RMagic2.soが LoadErrorで見つからないと言われているようなのですが、エクスプローラーで確認する限りは存在しています。
どこかの設定が違っているようです。
C:\DATA>ruby -e "require 'rmagick';puts Magick::colors" Traceback (most recent call last): 2: from -e:1:in `(main)' 1: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- rmagick (LoadError) 9: from -e:1:in `(main)' 8: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:34:in `require' 7: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `rescue in require' 6: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `require' 5: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rmagick-2.16.0/lib/rmagick.rb:1:in `' 4: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 3: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' 2: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rmagick-2.16.0/lib/rmagick_internal.rb:12:in ` ' 1: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': 126: 指定されたモジュールが見つかりま せん。 - C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rmagick-2.16.0/lib/RMagick2.so (LoadError) ・・・
トラブル対応
RMagickが正常に稼働しないので、改めて ImageMagickと RMagickの再導入を覚悟してトラブル対応をしました。
設定変更
取り敢えずネットをググったところ、沢山の同じような事象に合われている方がいることが判りました。それらの中から、以下の対応を試してみます。
gem pristine
gem pristineとは、インストールされた gemをそのキャッシュされた .gemファイルの内容と比較し、キャッシュされた .gemのコピーと一致しないファイルを復元することだそうです。
以下のように実行はできたのですが、RMagick稼働確認では、同じエラーで動きませんでした。
C:\DATA>gem pristine rmagick Restoring gems to pristine condition... Temporarily enhancing PATH for MSYS/MINGW... Building native extensions. This could take a while... Restored rmagick-2.16.0
LD_LIBRARY_PATH
LD_LIBRARY_PATH環境変数に、パスを設定すると良いとのことだったので、以下のように LIBRARY_PATHと同じ ImageMagickのパスを設定してみました。
結果は、RMagick稼働確認では、同じエラーで動きませんでした。
C:\DATA>set LD_LIBRARY_PATH=C:\Program Files\ImageMagick-6.9.12-Q16\lib C:\DATA>echo %LD_LIBRARY_PATH% C:\Program Files\ImageMagick-6.9.12-Q16\lib
RMagickの再導入
そこで、RMagickを再導入することにします。再導入にあたっては、導入バージョン 2.16.0 は削除し、最新バージョンの 4.2.2 を 導入することにします。
因みに、確認すると RMagickには以下のバージョンがあるようです。
rmagick (4.2.2, 4.2.1, 4.2.0, 4.1.2, 4.1.1, 4.1.0, 4.0.0, 3.2.0, 3.1.0, 3.0.0, 2.16.0, 2.15.4, 2.15.3, 2.15.2, 2.15.1, 2.15.0, 2.14.0, 2.13.4, 2.13.3, 2.13.2, 2.13.1, 2.12.2, 2.12.1, 2.12.0, 2.11.1, 2.11.0, 2.10.0, 2.9.2, 2.9.1, 2.9.0, 2.8.0, 2.7.2, 2.7.1, 2.7.0, 2.6.0, 2.5.2, 2.5.1, 2.5.0, 2.4.0, 2.3.0, 2.2.2, 2.2.0, 2.1.0, 2.0.0, 1.15.17, 1.15.16, 1.15.15, 1.15.14, 1.15.13, 1.15.12, 1.15.11, 1.15.10, 1.15.9, 1.15.8, 1.15.7, 1.15.6, 1.15.5, 1.15.4, 1.15.3, 1.15.2, 1.15.1, 1.15.0, 1.14.1, 1.14.0, 1.13.0, 1.12.0, 1.11.1, 1.11.0, 1.10.1, 1.10.0, 1.9.3, 1.9.2, 1.9.1, 1.9.0, 1.8.3, 1.8.2, 1.8.1, 1.8.0, 1.7.4, 1.7.3, 1.7.2, 1.7.1)
uninstall
RMagickバージョン 2.16.0 を削除します。
C:\DATA>gem uninstall rmagick Successfully uninstalled rmagick-2.16.0 C:\DATA>gem list rmagick *** LOCAL GEMS ***
install
最新の RMagickバージョン 4.2.2 を導入します。
C:\DATA>gem install rmagick Temporarily enhancing PATH for MSYS/MINGW... Building native extensions. This could take a while... Successfully installed rmagick-4.2.2 Parsing documentation for rmagick-4.2.2 Installing ri documentation for rmagick-4.2.2 Done installing documentation for rmagick after 3 seconds 1 gem installed C:\DATA>gem list rmagick *** LOCAL GEMS *** rmagick (4.2.2)
稼働確認
導入が正常にできたので、RMagickの稼働確認を行います。
C:\DATA>ruby -e "require 'rmagick';puts Magick::colors" name=AliceBlue, compliance=AllCompliance, color.red=61680, color.green=63736, color.blue=65535, color.alpha=65535 name=AntiqueWhite, compliance=AllCompliance, color.red=64250, color.green=60395, color.blue=55255, color.alpha=65535 name=AntiqueWhite1, compliance=X11Compliance, color.red=65535, color.green=61423, color.blue=56283, color.alpha=65535 name=AntiqueWhite2, compliance=X11Compliance, color.red=61166, color.green=57311, color.blue=52428, color.alpha=65535 name=AntiqueWhite3, compliance=X11Compliance, color.red=52685, color.green=49344, color.blue=45232, color.alpha=65535 name=AntiqueWhite4, compliance=X11Compliance, color.red=35723, color.green=33667, color.blue=30840, color.alpha=65535 ・・・
今度は、正常に稼働しました。
これで、以下のバージョンの組み合わせでは、RMagickは稼働するようです。
- ImageMagick 6.9.12
- RMagick 4.2.2
今回、ImageMagick 6系を導入しましたが、機会があれば最新バージョンの 7系を導入して、RMagickの導入と稼働が出来るか試してみたいと思います。