ImageMagick
DrupalのImage APIとImageMagick/GraphicsMagickを統合し、サーバーサイドでの高度な画像処理機能を提供するモジュールです。
imagemagick
インストール
composer require 'drupal/imagemagick:^4.0'
概要
ImageMagickモジュールは、DrupalのコアImage APIにImageMagick/GraphicsMagickパッケージを統合するImage Toolkitプラグインを提供します。デフォルトのGDツールキットに代わる高機能な画像処理エンジンとして機能し、より多くの画像形式のサポートと高品質な画像処理を実現します。
ImageMagickは、画像の読み込み、変換、編集を行うコマンドラインベースのスタンドアローンパッケージです。PHPのGDライブラリとは異なり、オペレーティングシステムのシェルを介して実行されます。これにより、GDでは扱えない形式(TIFF、PDF、PSD、HEIC、AVIFなど)の処理が可能になります。
このモジュールは、画像スタイルの適用時にidentifyコマンドで画像情報を取得し、convertコマンドで実際の画像変換を実行します。すべての画像操作(リサイズ、トリミング、彩度除去など)は、最終的な保存時に一括で実行されます。
また、File Metadata Managerモジュールとの連携により、画像メタデータのキャッシュが可能で、ファイルI/Oやシェルコマンドの実行回数を削減してパフォーマンスを向上させることができます。
Features
- ImageMagick/GraphicsMagickをDrupalのImage Toolkitとして統合し、コマンドラインベースの高度な画像処理を実現
- 多数の画像形式(PNG、JPEG、GIF、WEBP、TIFF、PDF、HEIC、BMP、PSD、SVGなど)のサポート、有効化/無効化を個別に設定可能
- ImageMagickバージョン6およびバージョン7の両方をサポート(コマンドライン構文の違いを自動的に処理)
- GraphicsMagickへの切り替えが可能で、同様の機能を軽量な代替パッケージで実現
- リサイズ、スケール、トリミング、スケール&トリミング、彩度除去、フォーマット変換、新規画像作成などの標準的な画像操作をサポート
- イベントシステムにより、identify/convertコマンドの実行前後でカスタム処理やパラメータの追加が可能
- リモートファイルシステム(S3など)のサポート - ローカルへの一時コピーを自動的に処理
- 画像品質、色空間変換、カラープロファイル適用、解像度変更などの高度な画像設定
- デバッグモードで実行されるコマンドと出力を詳細にログ記録・表示
- File Metadata Managerとの統合による画像メタデータのキャッシュでパフォーマンス最適化
Use Cases
高品質な画像スタイル処理
Drupalの画像スタイルでImageMagickを使用することで、GDツールキットよりも高品質なリサイズやトリミングが可能になります。特に大きな画像を縮小する際の品質が向上し、JPEGの圧縮アーティファクトも軽減されます。管理 > 環境設定 > メディア > イメージツールキットでImageMagickを選択し、品質を調整してください。
WebPやAVIFなどの次世代画像形式への変換
ImageMagickを使用して、アップロードされたJPEG/PNG画像をWebPやAVIF形式に変換できます。画像形式設定でWEBPやAVIFを有効化し、画像スタイルで「Convert」効果を使用するか、イベントサブスクライバでsetDestinationFormat()を呼び出して出力形式を変更します。
PDFのサムネイル生成
ImageMagickとGhostscriptを組み合わせて、アップロードされたPDFファイルのサムネイル画像を生成できます。PDF形式を有効化し、identify_framesとconvert_framesを設定して処理するページ数を制限します(例:'[0]'で最初のページのみ)。
リモートストレージ(S3)からの画像処理
S3などのリモートファイルシステムに保存された画像もシームレスに処理できます。モジュールのイベントサブスクライバが自動的にリモートファイルをローカル一時ディレクトリにコピーし、処理後に結果をリモートに書き戻します。特別な設定は不要です。
カラープロファイル変換によるWeb表示の最適化
CMYKやAdobe RGBカラープロファイルを持つプロフェッショナル画像をsRGBに変換し、Webブラウザでの正確な色表示を実現します。高度な画像設定でsRGBカラープロファイルのパスを指定するか、色空間をsRGBに設定してください。
画像処理のデバッグとトラブルシューティング
画像スタイルの生成に問題がある場合、「デバッグ情報を表示」オプションを有効にすると、実行されるImageMagickコマンドとその出力がログに記録され、管理者に表示されます。-debug Allを前置引数に追加すると、ImageMagick内部の詳細なデバッグ出力も取得できます。
アニメーションGIFの適切な処理
アニメーションGIFをリサイズする際の問題を回避するために、「Coalesce Animated GIF images」オプションを有効化します。これにより、各フレームが完全に定義され、リサイズ後もアニメーションが正しく表示されます。
カスタムイベントサブスクライバによる画像処理の拡張
ImagemagickExecutionEvent::PRE_CONVERT_EXECUTEイベントをサブスクライブして、convertコマンドに独自の引数を追加できます。例えば、透かしの追加、シャープネスの適用、特定の条件での処理変更などをカスタムモジュールで実装できます。$event->getExecArguments()->add()メソッドで引数を追加します。
Tips
- $settings['imagemagick.process.timeout']をsettings.phpで設定して、大きなファイルの処理時のタイムアウトを調整できます(デフォルト60秒)
- ImageMagickバージョン7を使用している場合は、設定で必ずVersion 7を選択してください。コマンドライン構文が異なるため、誤った設定では動作しません
- PDF処理にはGhostscriptが必要です。サーバーにインストールされていることを確認してください
- デバッグモードは本番環境では無効にしてください。コマンドとファイルパスがログに記録され、セキュリティリスクになる可能性があります
- GraphicsMagickはImageMagickより軽量で、一部の環境ではパフォーマンスが向上する場合があります
- 画像形式の設定でweightを使用して、同じMIMEタイプを持つ複数の形式の優先順位を制御できます(数値が小さいほど優先)
- identify_framesとconvert_framesを使用して、マルチフレーム画像(PDF、アニメーションGIF)の処理を制限し、パフォーマンスを向上させることができます
Technical Details
Admin Pages 1
/admin/config/media/image-toolkit
Drupalの画像処理に使用するツールキットを選択し、ImageMagickツールキットの詳細設定を行う管理画面です。ツールキットの切り替え、ImageMagick/GraphicsMagickの選択、バイナリパスの設定、画像形式の有効化/無効化、品質設定、高度な画像処理オプションを設定できます。
Troubleshooting 7
PHPの設定でproc_open()関数が無効化されています。php.iniファイルのdisable_functionsからproc_openを削除するか、ホスティングプロバイダに連絡して有効化を依頼してください。
「グラフィックスパッケージ」セクションで正しいパスを設定してください。Linux/macOSでは通常/usr/bin/、Windowsではインストールディレクトリ(例:C:\Program Files\ImageMagick-7.0-Q16\)を指定します。パスの末尾にスラッシュを含めてください。
File Metadata Managerのキャッシュ設定を確認し、imagemagick_identifyプラグインのキャッシュを有効化してください。また、$settings['imagemagick.process.timeout']でタイムアウト値を調整できますが、パフォーマンスに影響する可能性があります。
Drupalコアの「回転」効果はImageMagickモジュールでサポートされていません。Image Effectsモジュールをインストールし、画像スタイルで使用している回転効果をImage Effectsが提供するものに置き換えてください。
管理 > 環境設定 > メディア > イメージツールキットの「画像形式」セクションで該当する形式が有効化されているか確認してください。また、ImageMagickのインストールに該当形式のサポートが含まれているかを「Format list」で確認してください。
一時ディレクトリ(temporary://)への書き込み権限を確認してください。また、PHPのメモリ制限が大きなファイルをコピーするのに十分かどうかを確認してください。
高度な画像設定で「Convert colorspace」をsRGBに設定するか、sRGBカラープロファイルのパスを設定してください。これにより、異なるカラープロファイルを持つ画像がWeb表示用に正規化されます。
Security Notes 5
- proc_open()関数の有効化はセキュリティリスクを伴います。信頼できるホスティング環境でのみ使用してください
- path_to_binaries設定は管理者権限が必要です。任意のコマンド実行を防ぐため、適切なユーザー権限管理を行ってください
- デバッグモードはファイルパスやコマンドをログに記録するため、本番環境では無効化を推奨します
- ImageMagickにはセキュリティポリシーファイル(policy.xml)があり、処理可能な形式やリソース制限を設定できます。サーバー管理者と協力して適切に設定してください
- リモートファイルを処理する場合、一時ファイルが一定期間ローカルに残る可能性があります。定期的な一時ファイルのクリーンアップを確認してください