Imgix APIsレンダリング APIフォーマットHDRゲインマップ

HDRゲインマップ

hdr

hdr パラメータは、レンダリングを通してハイダイナミックレンジを保持します。HDR 写真はゲインマップによって追加の輝度情報を伝えます。これは通常の 8 ビット画像に付加される小さな副画像で、各ピクセルをどこまで明るくするかを HDR ディスプレイに伝えます。hdr を指定しない場合、変換を加えるとこのマップは失われ、出力は通常の SDR 画像になります。

hdr は以下の値を受け付けます。

値説明
true既存のゲインマップをレンダリング後も保持します。ソースが PQ または HLG の場合は新たに生成します。
false (デフォルト)ゲインマップとそのメタデータを除去し、通常の SDR ファイルを出力します。

このパラメータはデフォルトで無効のため、hdr を含まない URL はこれまでと完全に同じ動作をします。

ゲインマップを含むファイルは、どの環境に配信しても安全です。マップを解釈できないクライアントは SDR のベース画像を表示してマップを無視するため、すべての訪問者に同じ URL を配信できます。

マップを表示できるクライアントはコンテナ形式によって異なります。

コンテナ表示できるクライアント
Ultra HDR JPEGChrome / Edge 116 以降、Brave 1.58 以降、Opera 102 以降、Safari 26 以降
AVIF (ISO 21496-1 tmap)Chrome / Edge 129 以降 (137 以降で完全対応)、Safari 26 以降
HEIC (ISO 21496-1 tmap)Safari 26 以降および Apple プラットフォーム
JPEG XL (jhgm)現時点では未対応

Firefox はいずれの形式でもゲインマップを表示しません。Chrome はバージョン 129 で AVIF のゲインマップをデフォルトで有効にしましたが、これは ISO 21496-1 が確定する前のことです。確定後のメタデータで書き出されたファイルはバージョン 137 以降で表示されます。

hdr=true — ゲインマップが出力に保持されます
sandbox-demo
hdr=false — ゲインマップが除去されます
sandbox-demo

SDR ディスプレイでは HDR は確認できません

通常のディスプレイでは、この 2 つのレンダリング結果は同一に見えます。これはこのフォーマットの設計意図どおりです。hdr=true の効果を目視で確認するには、HDR ディスプレイとゲインマップを表示できるブラウザが必要です。

違いは画面上ではなくファイルの中にあります。hdr=true の出力には Ultra HDR v1 の hdrgm メタデータ、ISO 21496-1 のマーカー、そしてマップを保持する 2 枚目の埋め込み画像が含まれます。hdr=false の出力にはそのいずれも含まれず、通常の JPEG 1 枚になります。

サンプル画像は Android platform samples より、Apache License 2.0 に基づいて使用しています。

保持と生成

hdr=true は、ダイナミックレンジの 2 つの異なる入手経路に対応します。

  • アップロードされたマップの保持。 ソースファイルがすでにゲインマップを持っている場合、そのマップは画像と一緒に変換され、出力に書き込まれます。Imgix は、JPEG の Ultra HDR v1 および ISO 21496-1 形式、Apple の iOS 14〜17 の HDRGainMap 形式、HEIC の iOS 18 以降の tmap 形式と iOS 14〜17 の補助画像形式、AVIF の tmap アイテム、JPEG XL の jhgm ボックスを読み取ります。
  • 新しいマップの生成。 ソースがゲインマップを持たない PQ または HLG の場合、Imgix は 16 ビットでデコードし、トーンマップされた SDR ベースを基準にマップを算出します。

対応する出力フォーマット

ゲインマップは、それを保持できるフォーマットにのみ書き込まれます。

出力ゲインマップ
fm=jpg、fm=pjpgUltra HDR v1 および ISO 21496-1
fm=avif (静止画)ISO 21496-1 tmap アイテム
fm=heic (静止画)ISO 21496-1 tmap アイテム
fm=jxl (静止画)jhgm ボックス
fm=webp、fm=png、アニメーション AVIFなし

マップを保持できないフォーマットに hdr=true を指定してもエラーにはなりません。画像は通常どおりレンダリングされ、マップが付かないだけです。

JPEG XL のゲインマップは書き込まれますが、まだ表示されません

現時点で jhgm ボックスを読み取るブラウザやビューアは存在しないため、JPEG XL 出力はどの環境でも SDR として表示されます。将来対応したビューアが変更なしで読み取れるよう、ボックスは現時点から書き込まれています。

auto=format は Chrome に対して、また バージョン 16.4 以降の Safari に対して AVIF を配信します。これらは AVIF のゲインマップを表示できるブラウザであるため、auto=format のトラフィックの多くで HDR が維持されます。

マップが維持される操作

変換は 4 つのグループに分かれます。

挙動操作
マップが画像と一緒に変換されるジオメトリ (リサイズ、クロップ、回転、ワープ)、exp、con、sat、hue などのトーン・色調整、blur や px などの空間フィルタ
描画領域でマップが無効化されるウォーターマーク、テキスト、背景ボックス、ボーダー、ドロップシャドウ、パディングや追加された領域
マップが完全に破棄されるhalftone、エッジ検出、invert、duotone、gradient-map
ソースによって異なる色空間の変更 — 下記を参照

無効化とは、何かが上に描画された箇所のゲインをゼロに設定することです。これにより、明るい空の上に置かれた白いウォーターマークが発光せず、SDR の明るさのまま保たれます。

色空間の変更

1 チャンネルのゲインマップ — Pixel 端末が書き出す形式 — は、どの色空間変更でも維持されます。3 チャンネルのマップは、出力の色空間がソースと異なる場合に破棄されます。これには cs=、gamut=、および sRGB 以外のソースに適用された auto=compress が含まれます。

HDR を明示的に無効化する

hdr=false はゲインマップとそのメタデータを除去し、通常の SDR ファイルを出力します。

hdr は再エンコードを強制します

hdr はパススルーのスキップ対象に含まれていないため、本来は無変換で配信される URL にこのパラメータを付けると、画像が再エンコードされます。これは hdr=true と hdr=false のどちらでも同じで、トリガーとなるのは値ではなくパラメータの有無です。マップの保持・生成・除去が必要な場合にのみ指定してください。

hdr=true と hdr=false はいずれも X-Imgix-Params レスポンスヘッダーに表示されます。

ディスプレイに応じた HDR の出し分け

ゲインマップを含むファイルはどの環境でも安全に表示できるため、通常は単一の URL を配信すれば十分です。出し分けが有効なのは、マップを利用できないクライアントに余分なゲインマップのバイト数を送りたくない場合に限られます。その場合はキャッシュのバリアントが 1 つ増えるため、削減できるバイト数と見合うかどうかを検討してください。

ディスプレイが HDR を表示できるかどうかは、CSS の dynamic-range: high メディアクエリを通じてクライアント側でのみ判定できます。<picture> 要素を使ってブラウザに選択させてください。

<picture>
  <source
    media="(dynamic-range: high)"
    srcset="https://assets.imgix.net/docs/ultrahdr-cityscape.jpg?w=800&hdr=true"
  />
  <img src="https://assets.imgix.net/docs/ultrahdr-cityscape.jpg?w=800" alt="夕暮れの街のスカイライン" />
</picture>

Chrome はウィンドウが現在表示されているディスプレイに対してこのクエリを評価するため、HDR モニタと SDR モニタの間でウィンドウを移動すると再評価されます。

制限事項

  • Imgix Video を経由するレンダリングはエンコードのみを行うため、ゲインマップを保持しません。
  • ベース画像がすでに HDR レンディションであるソースは、マップを破棄します。
  • アップロードされたマップは、ヘッドルーム、最小値・最大値、ガンマ、オフセットといった元のメタデータをそのまま保持します。
  • 不正なゲインマップは破棄され、SDR のベース画像が配信されます。