画像の向きとは、画像を見たときにどの方向を向いているかということです。正しい向き、逆さま、横向き、鏡映しなどがあります。ファイルのメタデータでは、Orientation フィールドが、保存されている画像をどのように回転させれば正しい向きに表示できるかをソフトウェアに伝えます。
写真撮影では、向きは縦向き(ポートレート)か横向き(ランドスケープ)を意味することが多いです。縦向きの画像は高さの方が幅より長く、横向きの画像は幅の方が高さより長いです。写真を撮ると、カメラやスマートフォンは、どの向きで構えていたかを向きのデータとしてファイルに保存します。
どのファイルがそれを持っているか
Orientation タグは Exif 規格の一部で、TIFF 形式から取り入れられています。タグ ID は 0x0112(10 進数では 274)です。規格ではメイン画像用の推奨タグとして定義されており、次のようなファイルに含まれていることがあります。
HEIC ファイルでは、回転と反転をコンテナの個別のプロパティとして保存することもでき、irot と imir という名前が付いています。一部のカメラは独自タグも追加します。例えば一部の Canon 機種は CameraOrientation を書き込み、メタデータのレポートでは Horizontal (normal)、Rotate 90 CW、Rotate 270 CW のように表示されます。
値の見え方
ファイル内部では、この値は 1 から 8 までの数値です。各数値は、保存されているピクセルの最初の行と最初の列が画面上のどこに来るかを表します。メタデータのレポートでは、通常その意味を文字で示し、CW は clockwise(時計回り)を意味します。
1はHorizontal (normal)です。画像が正しい向きで保存されているため、何も変更されません。3はRotate 180です。画像が逆さまに保存されています。6はRotate 90 CWです。ソフトウェアは表示する前に画像を時計回りに 90 度回転させます。8はRotate 270 CWです。ソフトウェアは画像を時計回りに 270 度(反時計回りに 90 度)回転させます。2、4、5、7では鏡像反転が加わります。例えばMirror horizontalです。
規格では、それ以外の数値はすべて予約値とされています。そのため、1 から 8 以外の値には定義された意味がありません。
動画が回転を保存するしくみ
動画ファイルでは、向きの扱い方が異なります。MP4 や MOV ファイルは、動画トラックのヘッダーに表示マトリクスを保存します。このマトリクスが、プレーヤーに対してフレームを表示する前にどのように回転・反転させるかを指示します。
メタデータを読み取るプログラムは、このマトリクスを度数法の 1 つの角度に変換します。ExifTool は角度を時計回りにカウントし、FFmpeg は −180 から 180 の範囲で反時計回りにカウントします。そのため、同じ動画でも、あるレポートでは 90、別のレポートでは -90 と表示されることがあります。
ファイルにとって重要な理由
Orientation の値はピクセル自体を移動させるものではありません。ピクセルはカメラが保存した順序のままであり、タグはそれをどのように表示するかをビューアに伝えるだけです。Web ブラウザは通常このタグを自動で適用しますが、タグを無視するプログラムでは、縦向きの写真が横向きに寝て表示されてしまいます。
これは、幅と高さが入れ替わったように見える理由でもあります。Image Width と Image Height は、回転前の保存されているピクセルを表します。そのため、Rotate 90 CW の縦向き写真では、高さよりも大きい幅が記録されることがあります。
編集によって別の問題が発生することもあります。プログラムがピクセルだけ回転させて古いタグを残したままにすると、画像が 2 回回転した状態になります。Exif 規格では、編集ソフトウェアに対し、画像を回転させた後は Orientation を 1 に戻すことを推奨しています。
PDF のページは独自のフィールドを使用します。Page Rotation は、ページが表示または印刷されるときに、ページ全体を 90 度刻みで時計回りに回転させます。