イメージ メタデータを読み取る方法 (HTML)

[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]

ここでは、画像ファイルからメタデータを取得する方法について説明します。 JPEG や TIFF、PNG の画像形式では、キーワード、GPS の位置情報、カメラ情報などを記述する多様な埋め込みメタデータがサポートされます。共通して使われるイメージング プロパティにアクセスしたり、EXIF や XMP などの形式で保存された処理されていないメタデータに対して高度なアクセスを実行できます。

使用するシナリオによって、Windows.Storage.FileProperties.ImagePropertiesWindows.Graphics.Imaging.BitmapPropertiesView という 2 つのクラスでイメージング メタデータにアクセスできます。

BitmapPropertiesView を使うと、ImageProperties などの Windows プロパティを取得できます。ただし、WIC メタデータ クエリ言語を使って、ファイル中のネイティブ メタデータ構造に下位レベルでアクセスすることができます。ネイティブ メタデータへのアクセスは、高度なシナリオですが、Windows プロパティ システムの場合に比べ、より多くのメタデータにアクセスすることができます。

理解しておく必要があること

テクノロジ

必要条件

手順

ステップ 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" になります。

関連トピック

画像をデコードする方法

メタデータ クエリ言語の概要

System.Photo プロパティ

イメージ メタデータを書き込む方法

フォト メタデータ ポリシー