イメージ メタデータを読み取る方法 (HTML)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
ここでは、画像ファイルからメタデータを取得する方法について説明します。 JPEG や TIFF、PNG の画像形式では、キーワード、GPS の位置情報、カメラ情報などを記述する多様な埋め込みメタデータがサポートされます。共通して使われるイメージング プロパティにアクセスしたり、EXIF や XMP などの形式で保存された処理されていないメタデータに対して高度なアクセスを実行できます。
使用するシナリオによって、Windows.Storage.FileProperties.ImageProperties と Windows.Graphics.Imaging.BitmapPropertiesView という 2 つのクラスでイメージング メタデータにアクセスできます。
BitmapPropertiesView を使うと、ImageProperties などの Windows プロパティを取得できます。ただし、WIC メタデータ クエリ言語を使って、ファイル中のネイティブ メタデータ構造に下位レベルでアクセスすることができます。ネイティブ メタデータへのアクセスは、高度なシナリオですが、Windows プロパティ システムの場合に比べ、より多くのメタデータにアクセスすることができます。
理解しておく必要があること
テクノロジ
- JavaScript を使った初めての Windows ランタイム アプリの作成
- Windows.Storage.FileProperties.ImageProperties
- Windows.Graphics.Imaging
- Windows Imaging Component (WIC) メタデータ クエリ言語
必要条件
- JavaScript を使った基本的な Windows ランタイム アプリを作成できることを前提としています。詳しくは、「JavaScript を使った初めての Windows ランタイム アプリの作成」をご覧ください。
- StorageFile オブジェクト、または BitmapDecoder オブジェクトが既に作られているものとします。 「画像をデコードする方法」では、両方のオブジェクトを取得する方法について説明しています。
手順
ステップ 1: デコーダー オブジェクトを取得する
BitmapDecoder オブジェクトを受け取る関数の先頭を記述し、取得したプロパティを格納する変数を宣言します。
(function (decoder) {
var orientation;
var xmpCreator;
デコーダーを使ってイメージ メタデータにアクセスします。 まだデコーダー オブジェクトがない場合は、「画像をデコードする方法」をご覧ください。 変数がスコープ内に収まるように宣言します。
ステップ 2: Windows プロパティを取得する
BitmapDecoder クラスには、BitmapPropertiesView の一種である BitmapProperties というメンバーが含まれています。ImageProperties と同様に、bitmapProperties.getPropertiesAsync にプロパティ キー名の一覧を渡すことにより、サポートされる Windows プロパティを非同期に要求することができます。
注 すべてのプロパティがすべての形式でサポートされているわけではありません。「フォト メタデータ ポリシー」には、各プロパティをサポートする画像形式の一覧が示してあります。
return
decoder.bitmapProperties.getPropertiesAsync(["System.Photo.Orientation"])
.then(function(retrievedProps) {
BitmapPropertiesViewBitmapPropertiesView は、いくつかの重要な点で ImageProperties とは異なる動作を示します。
- コレクションからプロパティを取得する前に、それが存在することを確認する必要があります。プロパティが存在しない場合、メソッドはエラーを返します。
- 各プロパティの値の種類は、BitmapTypedValue です。このオブジェクトには、実際のデータを含む Value というメンバーと、データを表す Type というメンバーがあります。
- BitmapPropertiesView は、要求したプロパティが画像形式でサポートされない場合、エラーを返します。これらのエラーを処理するか、画像形式がサポートするプロパティだけをコードで要求するようにコードを変更する必要があります。たとえば、BMP ファイルにはメタデータは含まれていません。
次の方法により、プロパティを調べることができます。
if (retrievedProperties.hasKey("System.Photo.Orientation") {
orientation = retrievedProperties.lookup("System.Photo.Orientation").value;
}
}, function (error) {
switch (error.number) {
case -2003292287:
// The image format does not support this property.
break;
case -2003292287:
// The image format does not support metadata.
break;
default:
// Catch any other errors.
break;
}
});
ステップ 3: ネイティブ イメージ メタデータを取得する
ImageProperties は Windows プロパティに限定される一方、BitmapPropertiesView では、画像中に保存された大部分のメタデータにアクセスすることができます。各ビットマップ コーデックでサポートされるメタデータ形式の一覧については、「ネイティブ イメージ形式メタデータのクエリ」の説明を参照してください。
プロパティを検索するには、「System.Photo プロパティ」の使用方法と同様に、WIC メタデータ クエリ言語を使用します。プロパティ名をメタデータ クエリの文字列に置き換えます。
手順 2. で記述したコードを次のコードに置き換えます。
return decoder.bitmapProperties.getPropertiesAsync(["/xmp/dc:creator"])
.then(function(retrievedProps) {
if (retrievedProperties.hasKey("/xmp/dc:creator") {
xmpCreator = retrievedProperties.lookup("/xmp/dc:creator").value;
}
}, function (error) {
switch (error.number) {
case -2003292287:
// The image format does not support this property.
break;
case -2003292287:
// The image format does not support metadata.
break;
default:
// Catch any other errors.
break;
}
});
このコード スニペットでは、Dublin Core XMP スキーマで定義された作成者メタデータを要求しています。クエリ "/xmp/dc:creator" は、JPEG 画像にのみ有効です。たとえば、TIFF 画像では XMP メタデータもサポートされますが、対応する TIFF クエリは "/ifd/xmp/dc:creator" になります。