ウルトラ HDR 画像形式 v1.0

はじめに

このドキュメントでは、JPEG 画像ファイルで対数範囲のゲインマップ画像をエンコードする新しいファイル形式の動作を定義します。新しい形式をサポートしていない従来のリーダーは、画像ファイルから従来の低ダイナミック レンジの画像を読み取って表示します。この形式をサポートしているリーダーは、プライマリ画像とゲインマップを組み合わせ、ハイ ダイナミック レンジ画像を互換ディスプレイにレンダリングします。

このドキュメントの残りの部分では、この形式を使用するために必要なプロセスのメソッドについて説明します。この形式に従った画像のライフサイクルの概要は次のとおりです。

  1. エンコード

    1. 地図を生成する
    2. 地図を圧縮する
    3. 地図のコンテナを生成する
  2. デコード


例
ウルトラ HDR 画像形式のファイル レイアウト(関連するメタデータとオフセット情報を含む)

図 1. ファイル レイアウトと関連するメタデータの例。

目的

このファイル形式の目標は、ディスプレイ技術と組み合わせて使用することで、最適な HDR レンディションを 1 つのファイルで作成できる、SDR 画像ファイル内の追加情報をエンコードすることです。

これを行うには、ファイル形式が次の条件を満たしている必要があります。

  • 下位互換性を保ち、単純なビューアで従来の SDR イメージが表示されるようにします。
  • 容量をあまり必要とせず、

さらに、表示手法は以下の条件を満たす必要があります。

  • デコードに負荷のかかる処理を必要としない。
  • ディスプレイの HDR ホワイト ポイントと SDR ホワイト ポイントの比率は、デバイスによって大幅に変化する可能性があります。また、単一のデバイスで時間的に変化することもあります。

最後に、この手法は、以下の条件を一切満たさずに上記のアクションをすべて実行できる必要があります。

  • クリップのハイライト。
  • 影を打ち破りましょう。
  • ローカル コントラストの変更または圧縮。
  • 相対的な色調の関係(シーン内のオブジェクト間)の変更

依存関係

この仕様の規範的な参照先は次のとおりです。

定義

  • SDR ディスプレイ

    • HDR コンテンツの表示用には設計されていない従来型のディスプレイです。通常、これらのディスプレイの公称ピーク輝度は約 400 cd/m2 以下です。
  • HDR ディスプレイ

    • HDR コンテンツ用に設計されたディスプレイ。これらのディスプレイは通常、SDR ディスプレイの公称ピーク輝度よりも高く、通常は 800 cd/m2 以上で、コントラスト比も SDR ディスプレイよりも優れています。
  • メイン画像

    • セカンダリ メディア ファイルが追加された GContainer ファイル内のイメージの最初のインスタンス。プライマリ イメージには、ファイル コンテナ内の後続のセカンダリ メディア アイテム ファイルの順序とプロパティを定義する GContainer XMP メタデータが含まれます。
  • サブ画像

    • GContainer ファイル内のプライマリ イメージに追加される、後続のメディア アイテム ファイル。
  • 範囲圧縮

    • 写真処理では、多くの場合、現実のシーンのダイナミック レンジは SDR ディスプレイで表現できます。画像のダイナミック レンジを縮小するには、範囲圧縮(ローカルトーン マッピングとも呼ばれます)などの処理が必要です。この縮小では、局所的なコントラストを可能な限り保ちながら、ハイライトのクリップやシャドウのつぶれを回避する必要があります。画像内の大きな輝度のエッジのサイズを小さくすると、全体的なコントラストが大きくなります。一方で、小さな輝度のエッジ(ディテール)はサイズが小さくなるようにします。さまざまな実装がありますが、最新のほとんどのデジタルカメラでは、このような操作が標準となっています。
  • SDR ホワイト ポイント

    • 特定の時点におけるディスプレイ上の SDR コンテンツの最大線形輝度。
  • HDR ホワイト ポイント

    • 特定の時点におけるディスプレイ上の HDR コンテンツの最大線形輝度。この値は通常、SDR のホワイト ポイントよりも高くなります。
  • Boost

    • HDR ホワイト ポイント数を SDR ホワイト ポイントで割った値。
  • 最大コンテンツ ブースト(計算式の max_content_boost

    • この値を指定すると、コンテンツ作成者は HDR ディスプレイで表示する場合の画像の明るさを SDR レンディションに対して制限できます。
    • この値は、特定の画像では定数です。たとえば、値が 4 の場合、特定のピクセルでは、表示される HDR レンディションの線形輝度は SDR レンディションの線形輝度の 4 倍以下である必要があります。実際には、シーンの明るい部分を最大 4 倍明るくできます。
    • 実際には、この値は通常 1.0 より大きくなります。
    • 常に [最小コンテンツ ブースト] 以上になります。
  • 最小コンテンツ ブースト(計算式の min_content_boost

    • この値を指定すると、コンテンツ作成者は HDR ディスプレイで表示する場合に、SDR レンダリングと比較して画像がどの程度暗くなるかを制限できます。この値は、特定の画像に対する定数です。
    • たとえば、値が 0.5 の場合、特定のピクセルで、表示される HDR レンディションの線形輝度は、SDR レンディションの線形輝度の(少なくとも)0.5 倍でなければなりません。
    • 実際には、この値は通常 1.0 以下になります。
    • 常に [最大コンテンツ ブースト] 以下になります。
  • 最大ディスプレイ ブースト(数式の max_display_boost

    • 特定の時点において、ディスプレイでサポートされているブーストの最大値。この値は、デバイスの設定やその他の要因(周囲光の状態、画面上の明るいピクセル数など)によって、時間の経過とともに変化する可能性があります。
    • たとえば、この値が 4.0 の場合、ディスプレイは SDR ホワイト ポイントの 4 倍以下の明るいピクセルを表示できます。ディスプレイは常に HDR ホワイトを SDR ホワイトと同程度に明るくするため、この値は常に 1.0 以上になります。
  • ディスプレイブースト

    • 「最大コンテンツ ブースト」と「最大ディスプレイ ブースト」のうち、小さい方の値に相当します。この値は常に 1.0 以上です。
    • たとえば、最大コンテンツ ブーストが 4.0 で、最大ディスプレイ ブーストが 3.0 の場合、ディスプレイ ブーストは 3.0 です。ディスプレイ能力が制限要因であるため、ピクセルの明るさは SDR の 3 倍になります。
    • 別の例で、最大コンテンツ ブーストが 4.0 で、最大ディスプレイ ブーストが 5.0 の場合、ディスプレイ ブーストは 4.0 です。コンテンツの意図が制限要因であるため、ピクセルは SDR の 4 倍明るく表示されます。
  • ターゲット HDR レンディション

    • コンテンツ クリエイターが選んだ、理想的な HDR レンディション。
  • 調整された HDR レンダリング

    • 現在のディスプレイ ブーストにターゲット HDR レンディションを適応させた後の、ディスプレイに表示される最終的な HDR レンディション。
  • ゲインマップ(数式の recovery(x, y)

    • ターゲット HDR レンディションを生成するために、SDR レンディションで各ピクセルをどの程度明るくするかを示すマップ。このマップは、単一チャネルまたはマルチチャネルのいずれかです。マルチチャネル マップは、赤、緑、青など、カラーチャネルごとに個別のゲインを示します。このドキュメントでは、単一チャネルの地図について説明します。
  • clamp(x, a, b)

    • x の値を範囲 [a, b] に固定します。
  • exp2(x)

    • 2 を底とする 2x の指数。
  • floor(x)

    • x 以下の最も近い整数を返します。
  • log2(x)

    • 2 を底とする対数、log2(x)
  • pow(b, x)

    • 指数、bx
  • XMP

    • 拡張可能なメタデータ プラットフォーム。メタデータを画像コンテナにエンコードする方法を定義する標準。ISO 16684-1:2011(E) XMP Specification Part 1 で定義されています。
  • マルチピクチャーフォーマット

    • Multi-Picture Format は、JPEG でエンコードされた複数の画像を 1 つの JPEG ファイルに保存するための、Camera and Imaging Products Association(CIPA)が開発した手法です。
    • 詳細については、関連する依存関係の White Paper of CIPA DC-x 007-2009 Multi-Picture Format をご覧ください。
  • GContainer

    • GContainer は、1 つのイメージ コンテナに複数のイメージを保存する方法であり、1 つのイメージがプライマリ イメージとみなされます。追加のイメージは、代替バージョンまたは補助機能とみなされます。XMP メタデータは、追加画像の有無と意味を伝えるために使用されます。詳細については、GContainer の詳細セクションをご覧ください。

エンコード

このセクションでは、適合する JPEG ファイルをエンコードする方法について説明します。JPEG 形式の詳細については、「依存関係」セクションの T.81 (09/92) Digital compression and coding of normal-tone space images を参照してください。

地図を生成する

一般に、カメラの画像処理パイプラインは、高ダイナミック レンジの輝度データを従来の SDR ディスプレイの低範囲に圧縮するために、範囲圧縮演算を実行します。ゲインマップは、元のより高いダイナミック レンジの輝度データを復元するのに十分なデータを保存するためのメカニズムを提供します。

このセクションの以下の計算では、浮動小数点演算を想定しています。

次の関数は SDR イメージを記述します。

  • SDR'(x, y) は、3 チャンネルの非線形(通常はガンマエンコード)プライマリ画像です。
  • SDR(x, y) は、3 チャンネルのプライマリ画像をリニア画像で、プライマリ画像の色空間をリニアに変換することで取得されます。たとえば、sRGB 転送関数を持つ色空間から、sRGB 原色を保持する線形色空間に変換できます。

Ysdr(x, y) 関数は、0.0 から 1.0 の範囲で定義され、標準のダイナミック レンジのプライマリ画像の線形輝度です。

Ysdr(x, y) = primary_color_profile_to_luminance(SDR(x, y))

HDR 画像にも同様の定義があります。

  • HDR'(x, y) は、3 チャンネルの非線形、つまり PQ または HLG でエンコードされた画像です。
  • HDR(x, y) は、3 チャンネルのリニア HDR 画像です。

Yhdr(x, y) は、HDR 画像の特定のポイントでの輝度です。

Yhdr(x, y) = primary_color_profile_to_luminance(HDR(x, y))

Yhdr(x, y) は、0.0 から最大コンテンツ ブーストの範囲で定義されます。

SDR と HDR の画像の解像度は同じである必要があります。SDR 画像のカラー プロファイルは、HDR 画像の色空間を定義します。

たとえば、SDR プライマリ画像に Display-P3 カラー プロファイルがある場合、HDR 画像はそのプロファイルのプライマリ カラーを基準として定義されます。つまり、HDR 画像にも Display-P3 プライマリがあります。

ゲインマップは、必要な HDR 画像の輝度 Yhdr(x, y) と標準範囲の輝度画像 Ysdr(x, y) を含む 2 つの線形画像から計算されます。

pixel_gain(x, y) 関数は、Yhdr(x, y) 関数と Ysdr(x, y) 関数の比率として定義されます。

pixel_gain(x, y) = (Yhdr(x, y) + offset_hdr) / (Ysdr(x, y) + offset_sdr)

Ysdr(x, y)offset_sdr の両方がゼロである pixel_gain(x, y) 関数の動作は、実装で定義されます。

たとえば実装では、pixel_gain(x, y) を 1.0 として定義することで、Ysdr(x, y)offset_sdr の両方がゼロの場合に対処できます。または、実装では、ゼロ以外の offset_sdr を使用することでこのシナリオを回避することもできます。

実装では、offset_sdroffset_hdr の値を選択する場合があります。

ゲインマップは、最大コンテンツ ブーストと最小コンテンツ ブーストに対して、対数空間で pixel_gain(x, y) をエンコードするスカラー関数です。

map_min_log2 = log2(min_content_boost)
map_max_log2 = log2(max_content_boost)

log_recovery(x, y) = (log2(pixel_gain(x, y)) - map_min_log2)
                   / (map_max_log2 - map_min_log2)
clamped_recovery(x, y) = clamp(log_recovery(x, y), 0.0, 1.0)
recovery(x, y) = pow(clamped_recovery(x, y), map_gamma)

log2(0) が未定義のため、pixel_gain(x, y) がゼロの recovery(x, y) 関数の動作は実装が定義されています。

map_gamma は、0.0 より大きい浮動小数点数であり、実装によって選択されます。

最大コンテンツ ブーストと最小コンテンツ ブーストの値は実装で定義され、コンテンツ作成者が任意に決定できます。最大コンテンツ ブーストには 1.0 以上の値を指定してください。最小コンテンツ ブーストは(0.0, 1.0] の範囲内にする必要があります。

recovery(x, y) の値は [0.0 ~ 1.0] の範囲に制限されます。

ゲインマップはセカンダリ画像 JPEG に保存されるため、8 ビットの符号なし整数値を使用してエンコードする必要があります。つまり、[0, 255] の範囲にエンコードされます。各値は recovery(x, y) 値を表し、セカンダリ画像の 1 ピクセルに格納されます。

8 ビット符号なし整数ストレージの場合、エンコードされた値は次のように定義されます。

encoded_recovery(x, y) = floor(recovery(x, y) * 255.0 + 0.5)

エンコード関数の計算は浮動小数点数で行われ、最後に、示されているように四捨五入して 8 ビットの符号なし整数値に変換されます。

このエンコードにより、0.0 ~ 1.0 の recovery(x, y) 値が 8 ビット符号なし整数表現になります。エンコードされたゲインマップは、JPEG としてセカンダリ画像アイテムに保存する必要があります。JPEG エンコードで使用する圧縮量は実装によって選択されます。

ゲインマップがセカンダリ イメージに格納されると、MPF と GContainer XMP メタデータを持つプライマリ イメージに追加されます。プライマリ画像の GContainer ディレクトリには、ゲインマップ画像のアイテムが含まれている必要があります。

格納されるゲインマップの解像度は実装で定義され、プライマリ画像の解像度と異なる場合があります。ゲインマップが、保存時にプライマリ画像とは異なる解像度にスケーリングされる場合、サンプリング方法はバイリニア以上である必要があり、実装で定義されます。

ゲインマップの向きは、プライマリ画像の向きと一致する必要があります。存在する場合、保存されたゲインマップ画像の方向メタデータ(EXIF など)は使用されません。

存在する場合、ゲインマップのカラー プロファイルは使用されません。

地図コンテナを取得する

カラー プロファイル

画像のカラー プロファイルは、プライマリ画像の ICC プロファイルで指定する必要があります。

XMP 属性

プライマリ画像には、HDR ゲインマップ形式の追加のセマンティック情報を含む 2 つ以上の画像を定義する XMP メタデータが含まれています。

以降のサブセクションには、この形式に固有の情報が記載されています。GContainer への一般的な適合性に関する追加情報は、GContainer の詳細セクションに記載されています。

次の表で説明する属性値は、指定された XMP の基本値の型の XMP シンプル値として保存されます。

アイテムのセマンティック値

Item:Semantic プロパティは、コンテナ ディレクトリ内の各メディア アイテムについて、アプリケーション固有の意味を定義します。

説明
メイン メディア アイテムがコンテナ内で表示可能なプライマリ画像であることを示します。ディレクトリには「メイン」アイテムを 1 つ含める必要があります。
ゲインマップ メディア アイテムがゲインマップであることを示します。このディレクトリには、最大 1 つの「GenomicsMap」アイテムを含められます。

HDR ゲイン地図メタデータ

ゲインマップのメタデータは、ゲインマップを解釈して適用してプライマリ画像の HDR 表現を生成する方法に関する情報をエンコードします。

ゲインマップ メタデータの XMP 拡張機能の XMP 名前空間 URI は http://ns.adobe.com/hdr-gain-map/1.0/ です。デフォルトの名前空間接頭辞は hdrgm です。

このメタデータは、ゲインマップ画像の XMP パケットに格納され、次のプロパティがゲインマップ画像の XMP の rdf:Description に表示される必要があります。

名前 タイプ 説明
hdrgm:バージョン テキスト 使用するゲインマップ形式のバージョン。このバージョンは「1.0」です。 必須。
hdrgm:BaseRenditionIsHDR ブール値 メイン画像のダイナミック レンジを示します。「False」は、プライマリ画像が SDR であることを示します。ゲインマップと組み合わせて HDR レンディションを生成できます。「True」はプライマリ画像が HDR であり、ゲインマップがそれと組み合わせて SDR レンディションを生成する可能性があることを示します。「False」にする必要があります。 省略可。デフォルト値は「False」です。
hdrgm:TriggerMapMin 実数または順序付き実数の配列 map_min_log2 の値を保存します。これは最小コンテンツ ブーストの log2 です。これは、特定のピクセルにおける、ターゲット HDR レンディションの線形輝度の、SDR 画像の輝度に対する(除算)の最小許容比率です。単一の実数か、実数の順序付き配列になります。実数の配列の場合、すべてのチャネルに適用される 1 つの項目を含めることも、赤、緑、青の各チャネルに対して 3 つの項目を含めることもできます。hdrgm:GainMapMax 以下の値を指定してください。省略可。デフォルト値は 0.0 です。
hdrgm:gaidMapMax 実数または順序付き実数の配列 map_max_log2 の値を保存します。これは最大コンテンツ ブーストの log2 です。これは、特定のピクセルにおける、ターゲット HDR レンディションの線形輝度の、SDR 画像の輝度に対する(除算)最大許容比率です。単一の実数か、実数の順序付き配列になります。実数の配列の場合、すべてのチャネルに適用される 1 つの項目を含めることも、赤、緑、青の各チャネルに対して 3 つの項目を含めることもできます。hdrgm:GainMapMin 以上にする必要があります。必須。
hdrgm:ガンマ 実数または順序付き実数の配列 map_gamma の値を保存します。これは、保存されたマップ値に適用するガンマです。単一の実数か、実数の順序付き配列になります。実数の配列の場合、すべてのチャネルに適用される 1 つの項目が含まれることもあれば、赤、緑、青のチャネルにそれぞれ 3 つの項目が含まれることもあります。0.0 より大きくしてください。省略可。デフォルト値は 1.0
hdrgm:OffsetSDR 実数または順序付き実数の配列 offset_sdr の値を保存します。ゲインマップの生成時と適用時に SDR ピクセル値に適用するオフセットです。単一の実数か、実数の順序付き配列になります。実数の配列の場合、すべてのチャネルに適用される 1 つの項目が含まれることもあれば、赤、緑、青のチャネルにそれぞれ 3 つの項目が含まれることもあります。0.0 以上にする必要があります。 省略可。デフォルト値は 0.015625(1/64)です。
hdrgm:OffsetHDR 実数または順序付き実数の配列 offset_hdr の値を保存します。ゲインマップの生成時と適用時に HDR ピクセル値に適用するオフセットです。単一の実数か、実数の順序付き配列になります。実数の配列の場合、すべてのチャネルに適用される 1 つの項目が含まれることもあれば、赤、緑、青のチャネルにそれぞれ 3 つの項目が含まれることもあります。0.0 以上にする必要があります。 省略可。デフォルト値は 0.015625(1/64)です。
hdrgm:HDRCapacityMin 実際にある hdr_capacity_min の値を保存します。これは、地図が適用される最小ディスプレイ ブースト値の log2 です。この値は、ディスプレイ ブーストに基づいてゲインマップを適用する量にも影響します。0.0 以上にする必要があります。省略可。デフォルト値は 0.0
hdrgm:HDRCapacityMax 実際にある hdr_capacity_max の値を保存します。これは、地図が完全に適用される最大ディスプレイ ブースト値の log2 です。この値は、ディスプレイ ブーストに基づいてゲインマップを適用する量にも影響します。hdrgm:HDRCapacityMin より大きくしてください。必須。

ゲインマップの例 XMP

次に挙げる有効なゲインマップの XMP パケットの例には、概要で説明したサンプル ファイルから取得したメタデータが含まれています。

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description rdf:about=""
     xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/"
     hdrgm:Version="1.0"
     hdrgm:GainMapMin="-0.57609993"
     hdrgm:GainMapMax="4.7090998"
     hdrgm:Gamma="1"
     hdrgm:OffsetSDR="0.015625"
     hdrgm:OffsetHDR="0.015625"
     hdrgm:HDRCapacityMin="0"
     hdrgm:HDRCapacityMax="4.7090998"
     hdrgm:BaseRenditionIsHDR="False"/>
  </rdf:RDF>
</x:xmpmeta>

ゲインマップの MPF ストレージ

ゲインマップ画像は、依存関係セクションで参照されているように、CIPA DC-x 007-2009 Multi-Picture Format で定義されている追加の画像として保存する必要があります。

デコード

このセクションでは、適合する JPEG ファイルからゲインマップをデコードする方法について説明します。

フォーマットのシグナル

この形式に準拠する JPEG ファイルは、プライマリ画像の XMP パケットに hdrgm:Version="1.0" が存在することで識別できます。ここで、hdrgm は名前空間 URI http://ns.adobe.com/hdr-gain-map/1.0/ です。

ゲインマップの画像を見つける

イメージの解析とデコードの詳細については、次の GContainer の詳細セクションをご覧ください。XMP rdf:Directory 内の「ゲインマップ」セマンティック アイテムは、ゲインマップ画像の位置を通知するために使用されます。または、MPF Index IFD とスキャン画像の XMP を使用してゲインマップの位置を決定します。

無効なメタデータを処理する

必須フィールドが存在しない場合、または無効な値を持つフィールドが存在する場合、メタデータは無効と見なされます。値は、指定された型で解析できないか、想定範囲外であるため、無効になることがあります。

メタデータが無効な場合、ゲインマップは無視され、SDR 画像が表示されます。

ディスプレイ

HDR ゲインマップ形式でエンコードされたファイルは、従来の SDR ディスプレイまたは高輝度出力が可能な HDR ディスプレイでレンダリングされます。

ゲインマップを使用して、適応した HDR レンダリングを作成する

このセクションの以下の計算では、浮動小数点演算を想定しています。

encoded_recovery(x, y) は、ゲインマップ画像からの単一チャネルの 8 ビット符号なし整数値です。

ゲインマップの解像度がプライマリ画像と異なる場合、encoded_recovery(x, y) は代わりにプライマリ画像の幅と高さの範囲で、x と y のゲインマップ画像をフィルタ処理してサンプリングすることによって決定されます。フィルタリング方法は、バイリニア以上である必要があり、実装で定義されています。

map_gamma は、hdrgm:Gamma メタデータ フィールドによって決まります。

log_recovery(x, y) は、対数空間での正規化された浮動小数点ピクセルゲインです。

recovery(x, y) = encoded_recovery(x, y) / 255.0
log_recovery(x, y) = pow(recovery(x, y), 1.0 / map_gamma)

最大ディスプレイ ブーストは、現在の HDR ホワイト ポイントと現在の SDR ホワイト ポイントの比率として定義されるスカラー浮動小数点値です。この値はディスプレイ システムによって提供され、時間とともに変化する可能性があります。

hdr_capacity_max は、hdrgm:HDRCapacityMax メタデータ フィールドによって決まります。hdr_capacity_min は、hdrgm:HDRCapacityMin メタデータ フィールドによって決まります。

hdrgm:BaseRenditionIsHDR が False の場合、weight_factor は次のように判断されます。

unclamped_weight_factor = (log2(max_display_boost) - hdr_capacity_min)
                        / (hdr_capacity_max - hdr_capacity_min)
weight_factor = clamp(unclamped_weight_factor, 0.0, 1.0)

hdrgm:BaseRenditionIsHDR が「True」の場合、2 つ目の方程式は次のようになります。

weight_factor = 1.0 - clamp(unclamped_weight_factor, 0.0, 1.0)

gain_map_max は、hdrgm:GainMapMax メタデータ フィールドによって決まります。gain_map_min は、hdrgm:GainMapMin メタデータ フィールドによって決まります。offset_sdr は、hdrgm:OffsetSDR メタデータ フィールドによって決まります。offset_hdr は、hdrgm:OffsetHDR メタデータ フィールドによって決まります。

線形適応 HDR レンディションは、次のように計算できます。

log_boost(x, y) = gain_map_min * (1.0f - log_recovery(x, y))
                + gain_map_max * log_recovery(x, y)
HDR(x, y) = (SDR(x, y) + offset_sdr) * exp2(log_boost(x, y) * weight_factor)
          - offset_hdr

必要に応じて、実装で HDR(x, y) に変換を適用して、ディスプレイで想定されるスペースにデータを配置できます。このような変形は色学的に正しいものでなければなりません。

GContainer の詳細

このセクションでは、この形式が GContainer XML メタデータに準拠するための追加要件を指定します。メタデータは ISO 166841:2011(E) XMP Specification Part 1 に従ってシリアル化され、Adobe XMP Specification Part 3 Storage in Files で説明されているようにプライマリ画像ファイル内に埋め込まれます。プライマリ画像ファイルには、RDF/XML 形式の次の項目が含まれます。

XMP パケットの要件

XMP パケットには、名前空間 URI http://ns.adobe.com/hdr-gain-map/1.0/ を介してゲインマップ メタデータの XMP 拡張を含める必要があります。デフォルトの名前空間プレフィックスは hdrgm です。

XMP パケットでは hdrgm:Version="1.0" を定義するものとします。

コンテナ要素

GContainer XMP 拡張機能の XMP 名前空間は http://ns.google.com/photos/1.0/container/ です。デフォルトの名前空間接頭辞は Container です。

プライマリ画像では、XMP メタデータ内に Container:Directory 要素が含まれ、ファイル コンテナ内の後続のメディア ファイルの順序とプロパティを定義します。コンテナ内の各ファイルの Container:Directory には、対応するメディア アイテムがあります。メディア アイテムには、ファイル コンテナ内の場所と、連結された各ファイルの基本プロパティを記述します。

コンテナ要素はプライマリ画像の XMP メタデータにエンコードされ、コンテナ内のメディア アイテムのディレクトリを定義します。メディア アイテムは、ディレクトリ内のメディア アイテム要素と同じ順序でコンテナ ファイルに配置し、密にパックする必要があります。

ディレクトリに含めることができる「プライマリ」画像アイテムは 1 つのみで、ディレクトリ内の最初のアイテムである必要があります。

要素名 タイプ 説明
Container:Directory 構造体の順序付き配列 コンテナのレイアウトとコンテンツを定義する Container:Item 構造体を含む構造体の順序付き配列。

アイテム要素

アイテム要素は、各メディア アイテムがアプリケーションによってどのように使用されるかを記述します。

GContainer アイテムの XMP 拡張機能の XMP 名前空間 URI は http://ns.google.com/photos/1.0/container/item/ です。デフォルトの名前空間接頭辞は Item です。

最初のメディア アイテムはメイン画像にする必要があります。アイテムの MIME タイプ値に記載されている Item:Semantic = "Primary"Item:Mime を指定する必要があります。

メイン画像のアイテムの長さは、ファイル コンテナの先頭から始まる MIME タイプに基づいて、プライマリ画像を解析することによって決定されます。

メディア アイテムには、メディア アイテムの末尾と次のメディア アイテムの先頭との間にある追加のパディングを指定する Item:Padding 属性を含めることができます。Container:Directory 内の最後のメディア アイテムに Item:Padding が存在する場合、アイテムの終了とファイルの間のパディングを示します。

各メディア アイテムには Item:Mime タイプと Item:Semantic 属性を含める必要があります。 セカンダリ画像のメディア アイテムには Item:Length 属性を含める必要があります。

シーケンシャル メディア アイテムは、ファイル コンテナ内でリソースデータを共有できます。最初のメディア アイテムではファイル コンテナ内のリソースの場所を決定し、後続の共有メディア アイテムでは Item:Length が 0 に設定されます。リソースデータ自体がコンテナの場合は、Item:URI を使用してリソース内のメディア アイテム データの位置を特定できます。

コンテナ内のメディア アイテム リソースの場所は、プライマリ画像エンコードの長さ、前のセカンダリ メディア アイテム リソースの Item:Length 値、先行するすべての Item:Padding 値を合計して決定されます。Item:Padding は、値が指定されていないメディア アイテム リソースで 0 とみなされます。

属性名 タイプ 説明
アイテム:MIME テキスト コンテナ内のメディア アイテムの MIME タイプを示す単純な文字列。定義については、「アイテムの MIME タイプの値」をご覧ください。必須。
アイテム:セマンティック テキスト メディア アイテムのアプリケーション固有の意味を示す単純な文字列。定義については、アイテムのセマンティック値のセクションをご覧ください。 必須。
アイテム:長さ 整数 正の整数の長さ(バイト単位)を含む単純な文字列。 長さ 0 は、メディア アイテム リソースが前のメディア アイテムと共有されることを示します。付随メディア アイテムに必須です。メイン画像のメディア アイテムでは省略可能です。
アイテム:ラベル テキスト 同じ Item:Semantic で複数のアイテム要素の曖昧さを取り除くために使用される実装定義の文字列。省略可
アイテム:パディング 整数 メディア アイテムの末尾と次のメディア アイテムの先頭の間、または Container:Directory 内の最後のメディア アイテムで使用される場合はファイルの末尾との間で、追加パディングの正の整数長(バイト単位)を含む文字列。存在しない場合は、値 0 とみなされます。 省略可。
アイテム:URI テキスト メディア アイテム リソース内のメディアデータの相対 URI を含む、ISO/IEC 14496-12 第 8.11.9 項に準拠した URI 文字列。デフォルトはプライマリ画像リソースです。ISO ベース メディア ファイル形式 ISO/IEC 14496-12 MIME タイプの場合は省略可。 それ以外の場合は使用できません。

アイテムの MIME タイプの値

Item:Mime 属性は、各メディア アイテムデータの MIME タイプを定義します。

説明
画像/JPEG JPEG 画像。

GContainer XMP の例

次の有効な GContainer XMP パケットの例には、概要セクションで説明したサンプル ファイルから取得したメタデータが含まれています。

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.1.2">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description
     xmlns:Container="http://ns.google.com/photos/1.0/container/"
     xmlns:Item="http://ns.google.com/photos/1.0/container/item/"
     xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/"
     hdrgm:Version="1.0">
      <Container:Directory>
        <rdf:Seq>
          <rdf:li rdf:parseType="Resource">
            <Container:Item
             Item:Semantic="Primary"
             Item:Mime="image/jpeg"/>
          </rdf:li>
          <rdf:li rdf:parseType="Resource">
            <Container:Item
             Item:Semantic="GainMap"
             Item:Mime="image/jpeg"
             Item:Length="66171"/>
          </rdf:li>
        </rdf:Seq>
      </Container:Directory>
    </rdf:Description>
  </rdf:RDF>
</x:xmpmeta>