File metadata manager
EXIF写真情報、フォント情報、画像サイズなどのファイルからメタデータを取得・管理するためのファイルメタデータマネージャーサービスとAPIを提供するDrupalモジュールです。
file_mdm
インストール
composer require 'drupal/file_mdm:^3.2'
composer require 'drupal/file_mdm:^3.1'
概要
File metadata managerは、EXIF写真メタデータ、TrueTypeフォント情報、画像サイズなど、ファイル内に保存された情報にアクセスして管理するための統一APIを提供します。このモジュールはプラガブルなアーキテクチャを実装しており、メタデータプロトコルはプラグインとして実装されるため、開発者はカスタムメタデータハンドラーでシステムを拡張できます。
このモジュールは、冗長なI/O操作を避けるためにリクエストの有効期間中メタデータを静的にキャッシュし、オプションでDrupalのキャッシュシステムにメタデータを保存してリクエスト間で永続化できます。また、リモートストリームラッパーに直接アクセスできないPHP関数のために、ローカル一時コピーを管理することでリモートファイルも処理します。
3つのプラグインが提供されています:「getimagesize」(ベースモジュールに含まれる)はPHPのgetimagesize()呼び出しをキャッシュし、「exif」(サブモジュール)はPHP Exif Libraryを使用してEXIFデータの読み書きを行い、「font」(サブモジュール)はPHP Font Libを使用してTTF/OTF/WOFFフォントメタデータを読み取ります。
Features
- 単一のサービスインターフェースを通じて様々なファイルタイプからメタデータを取得する統一API
- 異なるファイル形式用のカスタムプラグインを可能にするプラガブルなメタデータプロトコルシステム
- 冗長なファイルI/O操作を最小限に抑えるためのリクエスト有効期間中のメタデータの静的キャッシュ
- 設定可能な有効期限を持つDrupalのキャッシュbinへのメタデータの永続的キャッシュ
- JPEGおよびTIFF画像でのEXIFメタデータの読み書きサポート(サブモジュール経由)
- TTF、OTF、WOFFファイルからのフォントメタデータ抽出(サブモジュール経由)
- 画像サイズとタイプ検出のためのキャッシュされたPHP getimagesize()呼び出し
- 処理のためにローカル一時ストレージにコピーすることによるリモートファイルの自動処理
- ワイルドカードパターンを使用した設定可能なキャッシュ除外パス
- グローバル設定をオーバーライドする機能を持つプラグインごとのキャッシュ設定
- ファイルエンティティ削除時のキャッシュされたメタデータの自動クリーンアップ
Use Cases
画像の自動向き補正
EXIFプラグインを使用してアップロードされた写真からOrientationタグを読み取り、正しい回転を判断し、画像変換を適用し、オプションで修正された向きをファイルに書き戻します。
フォトギャラリーのメタデータ表示
exifプラグインを使用してアップロードされた写真からメタデータを抽出し、ギャラリー内の画像と一緒にEXIF情報(カメラモデル、露出設定、GPS座標)を表示します。
パフォーマンスのための画像サイズキャッシュ
getimagesizeプラグインを使用してリクエスト間で画像サイズをキャッシュし、リストやグリッドで画像を表示する際の繰り返しのファイルシステムアクセスを回避します。
フォント管理システム
fontプラグインを使用してアップロードされたTTF/OTF/WOFFフォントファイルからメタデータ(フォントファミリー、ウェイト、デザイナー、ライセンス)を抽出して表示するフォントライブラリを構築します。
リモートファイルのメタデータ抽出
copyUriToTemp()を使用して処理前にローカルコピーを作成することで、リモートファイルシステム(S3、CDN)に保存されたファイルからメタデータにアクセスし、リモートI/Oを最小限に抑えます。
一括画像処理の最適化
複数の画像を処理する際に、静的キャッシュを活用して、単一のリクエスト内で同じ画像が複数のモジュールや操作によってアクセスされる場合の繰り返しのファイル読み取りを回避します。
Tips
- キャッシュ無効化には専用のキャッシュbin「file_mdm」を使用します:設定変更のcache_tagsは自動的に処理されます
- temporary://スキームのファイルは設定に関係なくキャッシュされません
- 永続的キャッシュが無効になっていても、メタデータはリクエスト中に静的にキャッシュされます
- リモートファイルの場合、ネットワークリクエストを最小限にするためにgetMetadata()の前にcopyUriToTemp()を呼び出してください
- EXIFプラグインはメタデータを書き込めます - saveMetadataToFile()を呼び出し、リモートファイルの場合はオプションでcopyTempToUri()を呼び出すことを忘れないでください
- 各プラグインで利用可能なメタデータキーを発見するにはgetSupportedKeys()を使用します
- プラグイン設定はhook_file_metadata_plugin_info_alter()を使用して変更できます
Technical Details
Admin Pages 1
/admin/config/system/file_mdm
ファイルメタデータのキャッシュ設定とプラグインごとのキャッシュオプションを構成します。このページでは、パフォーマンスを最適化するためにファイルメタデータがどのようにキャッシュされるかを管理者が制御できます。
Hooks 1
hook_file_delete
ファイルエンティティが削除されたときにキャッシュされたメタデータをクリーンアップします。キャッシュされたファイルメタデータを自動的に削除し、メタデータマネージャーからファイルを解放します。