EXIFミニ知識

EXIFとは

 ディジタルスチルカメラ用画像ファイルフォーマット規格 Exchangeable image file format の略で、JEIDA(2000年にEIAJとの合併により現在はJEITA)においてディジタルスチルカメラおよびこれに関連するシステムで利用される画像ファイルフォーマットとして1995年に規定された(Ver1)もの。  画像ファイル自体についての情報の他、撮影条件や画像のタイトルや著作権等、関連音声ファイル情報、GPSによる撮影位置情報などを画像ファイルの中に保持することが出来る。
 ところで、撮影情報などは、デジタルカメラで撮った写真ならば、ほぼ自動的にファイルに記録されるが、タイトルは自分で入れるしかない。写真にタイトルやちょっとしたコメントを付しておくと、後で写真を見たときの楽しさがずっと大きなものになることは多くの方が経験していることと思うが、画像に標題はそれが簡単にできてしまう。

EXIFの記録フォーマット

1.JpegとExif
 ExifではJpegフォーマットのアプリケーション・マーカセグメント1(APP1)を利用してデータが記録されている。これを図示すると以下のようであるが、APP2以降の例にはadobe(APP13)などがある。なお、Exif規格ではAPP2はフラッシュピクス用に使用されることとなっている。

 

2.Exifデータ(APP1)の構造
 最初のAPP1マーカとAPP1レングスはJpegの規約により、前者はFFE1という2バイトのデータ、後者はマーカ以降のデータ長でx0002〜xFFFFの2バイトデータである。このことからExifデータは最大でも64kバイト以内でなければならないこととなる。なお、マーカとレングスは常にビッグ・エンディアン(*1)で記録される。
 次のExif識別コードはExifという4バイトの文字列+0000の2バイト、次のTIFFヘッダはExifデータの記録形式がビッグ・エンディアンかリトル・エンディアン(*1)かを示す記号で前者のときはMM、後者はIIの文字列2バイト + x002Aの2バイト + TIFFヘッダからの0thIFDの始まりまでのバイト数(IFDオフセット、0バイトから数える)4バイトからなっている。具体例を示すと次のようなものだ。
例1:FF E1 01 23 45 78 69 66 00 00 49 49 2A 00 08 00 00 00 この後0thIFD
例2:FF E1 01 23 45 78 69 66 00 00 4D 4D 00 2A 00 00 00 08 この後0thIFD

 ここから先はTIFFのIFD(Image File Directory)フォーマットに従ってデータが記録される。これは
データ識別タグ2バイト+データタイプ2バイト+データ数4バイト+データ4バイト
という12バイトの固定長データの集まりで、先頭にこれが何個あるかを2バイトで、末尾に1stIFDの先頭記録位置を4バイトで記録したものである。
 ここで重要なことは、実データの記録フィールドが4バイトしかないことで、実データが5バイト以上の場合には、別な場所にそれを記録してここにはその記録位置が先ほどのTIFFヘッダから何バイト離れているか(オフセットという)を4バイトで記録する。このため、Exifデータはどこか1つのデータの長さが変化すると、変更のないデータもその記録位置が変わるので、単純にデータをコピー&ペーストするだけではだめということになる。なお、1stIFDの記録位置も同様のオフセット値により記録される。

 以上のことから、n個のデータからなる1かたまりのIFDは、(2+n×12+4)バイトになる。Exifデータには0thIFDの他にもこのようなIFDが0〜4つ存在する。なお、1つのIFDの中では、タグ番号は昇順に並ぶ。
ExifIFD
 撮影条件データなどが記録される。ExifIFDを記録する場合は0thIFDのデータの中にExifIFDの記録位置(オフセット)を示すデータを含める。
GPSIFD
 撮影場所に関するGPS情報などが記録される。GPSIFDを記録する場合は0thIFDのデータの中にGPSIFDの記録位置(オフセット)を示すデータを含める。
互換性IFD
 Exifの旧バージョンとの互換性のための情報が記録される。これを記録する場合はExifIFDのデータの中に互換性IFDの記録位置(オフセット)を示すデータを含める。
1stIFD
 サムネイル画像に関連した情報が記録されるもので、1stIFDの記録位置は0thIFDの末尾にそのオフセットが記録される。

*1ビッグ・エンディアンとリトル・エンディアン
 一般にコンピュータでデータを記録するときは1バイト(8ビット)ずつ記録されるが、大きな数を記録しようとすると1バイトでは記録しきれないこととなる。例えば16進数の1234は2バイトあれば記録できるが、これを1バイトずつ記録する場合に12−34の順に記録するか、34−12の順に記録するかの2とおりの方法が考えられる。桁の大きい方から記録する前者をビッグ・エンディアン(つまり大端族)、反対の後者をリトル・エンディアン(つまり小端族)という。
 前者は記録の標記が数字の標記と同じになるので見やすいわけで、一方後者は順に読み出して値をソロバンにセットすることを考えたときに桁を意識せずに順に置いていけばよいというメリットがある。一般にインテル系プロセッサは後者で処理され、モトローラ系プロセッサなどは前者で処理される。
 ビッグ・エンディアン、リトル・エンディアンというのは、スイフトの「ガリバー旅行記」の第1話である「リリパット国(小人国)」の中に、卵を食べるときに昔からの習わしどおり大きい端を割って食べる人たち(ビッグ・エンディアン、カトリック教徒のことといわれている。)と、先の皇帝(ヘンリー8世のことといわれている。)のおふれに従って小さい端を割って食べる人たち(イギリス国教徒といわれている。)とが争いが絶えないという話があるところから由来しているともいわれている。

3.EXIFで記録されるデータのデータタイプとデータ数
 データタイプには次のような種別があり、タイプの番号が前述のIFD第2フィールドに2バイトで記録される。

タイプ   名 称     説 明
  1 BYTE 8 ビット符号無し整数
  2 ASCII 一つの7 ビットASCII コードを納めた8 ビットバイト。最後のバイトはNULLで終端す る。ASCII のカウントはNULL も含めた値とする。
  3 SHORT 16 ビット(2 バイト)符号無し整数
  4 LONG 32 ビット(4 バイト)符号無し整数
  5 RATIONAL LONG2 個。最初のLONG は分子、2 個目のLONG は分母を表す。
 (6) (SBYTE) (8 ビット符号付き整数)
  7 UNDEFINED フィールドの定義により、どんな値をとっても良い8 ビットバイト
 (8) (SSHORT) (16 ビット(2 バイト)符号付き整数)
  9 SLONG 32 ビット(4 バイト)符号付き整数(2 の補数表現)
 10 SRATIONAL SLONG2 個。最初のSLONG は分子、2 個目のSLONG は分母を表す。
 (11) (SFLOAT) (32 ビット(4 バイト)浮動小数点数)
 (12) (DFLOAT) (64 ビット(8 バイト)浮動小数点数)

 データ数は、上の表で示されるデータ何個からなっているかを4バイトで記録する。データタイプが1、2、7のときはデータ数が2ならば合計2バイトであるが、データ数が2でもデータタイプが3なら合計4バイト、データタイプ5なら16バイトになる。 

4.EXIFで記録されるデータのデータ項目(タグ)の種類
 タグ名称のマークは画像に標題で編集可能(特定の値への変更のみを含む)な項目

0thIFDのタグ
タグ名称 番号
(HEX)
データタイプ データ数
(処理ソフトウェア名) ( B) ( 2) (Any)
(画像の名前) (10D) ( 2) (Any)
画像タイトル*  10E  2 Any
画像入力機器のメーカー名  10F  2 Any
画像入力機器のモデル名*  110  2 Any
画像方向*  112  3  1
画像の幅の解像度  11A  5  1
画像の高さの解像度  11B  5  1
画像の幅と高さの解像度の単位  128  3  1
再生階調カーブ特性  12D  3 768
ソフトウェア  131  2 Any
ファイル変更日時*  132  2  20
アーティスト*  13B  2 Any
参照白色点の色度座標値  13E  5  2
原色の色度座標値  13F  5  6
タグ名称 番号
(HEX)
データタイプ データ数
色変換マトリクス係数  211  5  3
YCCの画素構成(YとCの位置)  213  3  1
参照黒色点値と参照白色点値  214  5  6
撮影著作権者/編集著作権者 8298  2 Any
Exif タグ 8769  4  1
GPS タグ 8825  4  1
(XPタイトル*) (9C9B) ( 1) (Any)
(XPコメント*) (9C9C) ( 1) (Any)
(XP作成者*) (9C9D) ( 1) (Any)
(XPキーワード) (9C9E) ( 1) (Any)
(XP件名) (9C9F) ( 1) (Any)
(Print Image Matching) (C4A5) ( 7) (Any)
(LUMIX赤ちゃん/ペット1) (C6D2) ( 7) ( 64)
(LUMIX赤ちゃん/ペット2) (C6D3) ( 7) (128)
(余白) (EA1C) ( 7) (Any)

ExifIFDのタグ
タグ名称 番号
(HEX)
データタイプ データ数
Exif バージョン 9000  7  4
対応フラッシュピックスバージョン A000  7  4
色空間情報 A001  3  1
再生ガンマ A500  5  1
各コンポーネントの意味 9101  7  4
画像圧縮モード 9102  5  1
実効画像幅 A002 3or4  1
実効画像高さ A003 3or4  1
メーカーノート 927C  7 Any
ユーザーコメント* 9286  7 Any
関連音声ファイル* A004  2  13
原画像データの生成日時* 9003  2  20
ディジタルデータの作成日時* 9004  2  20
ファイル変更日時の時差データ 9010  2 7
原画像データの生成日時の時差データ 9011  2 7
ディジタルデータの作成日時の時差データ 9012  2 7
ファイル変更日時のサブセック 9290  2 Any
原画像データの生成日時のサブセック 9291  2 Any
ディジタルデータの作成日時のサブセック 9292  2 Any
互換性IFDへのポインタ A005  4  1
露出時間* 829A  5  1
F ナンバー* 829D  5  1
露出プログラム 8822  3  1
スペクトル感度 8824  2 Any
撮影感度 8827  3 Any
光電変換関数 8828  7 Any
感度種別 8830  3  1
標準出力感度 8831  4  1
推奨露光指数 8832  4  1
ISOスピード 8833  4  1
ISOスピードラチチュードyyy 8834  4  1
ISOスピードラチチュードzzz 8835  4  1
シャッタースピード 9201  10  1
絞り値 9202  5  1
輝度値 9203  10  1
露光補正値 9204  10  1
レンズ最小F値 9205  5  1
被写体距離 9206  5  1
タグ名称 番号
(HEX)
データタイプ データ数
測光方式 9207  3  1
光源 9208  3  1
フラッシュ 9209  3  1
レンズ焦点距離* 920A  5  1
被写体領域 9214  3 2/3/4
フラッシュ強度 A20B  5  1
空間周波数応答 A20C  7 Any
焦点面の幅の解像度 A20E  5  1
焦点面の高さの解像度 A20F  5  1
焦点面解像度単位 A210  3  1
被写体位置 A214  3  2
露出インデックス A215  5  1
センサ方式 A217  3  1
ファイルソース A300  7  1
シーンタイプ A301  7  1
CFA パターン A302  7 Any
個別画像処理 A401  3  1
露出モード A402  3  1
ホワイトバランス A403  3  1
デジタルズーム倍率 A404  5  1
35mm換算レンズ焦点距離 A405  3  1
撮影シーンタイプ A406  3  1
ゲイン制御 A407  5  1
撮影コントラスト A408  3  1
撮影彩度 A409  3  1
撮影シャープネス A40A  3  1
撮影条件記述情報 A40B  7 Any
被写体距離レンジ A40C  3  1
温度 9400  10  1
湿度 9401  5  1
圧力 9402  5  1
水深 9403  10  1
加速度 9404  5  1
カメラの仰角 9405  10  1
画像ユニークID A420  2  33
カメラ所有者名 A430  2 Any
カメラシリアル番号 A431  2 Any
レンズの仕様情報 A432  5  4
レンズのメーカ名 A433  2 Any
レンズのモデル名 A434  2 Any
レンズシリアル番号 A435  2 Any

メーカーノートについて:メーカーノートの中の記録内容や記録形式については、全てメーカーに任されているので、一定の形式はないが多くの場合はIFD形式で記録されている。その場合でもオフセットの基準位置がExifのTiffヘッダーでないものやIFDブロックの最初に識別IDがあるなど一様ではない。なお、画像に標題ではかなりの精度でメーカーノートの形式を判別して処理が出来る。


GPSIFDのタグ
タグ名称 番号
(HEX)
データタイプ データ数
GPS タグのバージョン   0  1  4
北緯(N)or 南緯(S)*   1  2  2
緯度(数値)*   2  5  3
東経(E)or 西経(W)*   3  2  2
経度(数値)*   4  5  3
高度の基準*   5  1  1
高度(数値)*   6  5  1
GPS 時間(原子時計の時間)   7  5  3
測位に使った衛星信号   8  2 Any
GPS 受信機の状態   9  2  2
GPS の測位方法   A  2  2
測位の信頼性   B  5  1
速度の単位   C  2  2
速度(数値)   D  5  1
進行方向の単位   E  2  2
進行方向(数値)   F  5  1
タグ名称 番号
(HEX)
データタイプ データ数
撮影した画像の方向の単位  10  2  2
撮影した画像の方向(数値)  11  5  1
測位に用いた地図データ  12  2 Any
目的地の北緯(N)or 南緯(S)  13  2  2
目的地の緯度(数値)  14  5  3
目的地の東経(E)or 西経(W)  15  2  2
目的地の経度(数値)  16  5  3
目的地の方角の単位  17  2  2
目的の方角(数値)  18  5  1
目的地までの距離の単位  19  2  2
目的地までの距離(数値)  1A  5  1
測位方式の名称  1B  7 Any
測位地点の名称  1C  7 Any
GPS日付  1D  2  11
GPS補正測位  1E  3  1
水平方向測位誤差  1F  5  1

互換性IFDのタグ
タグ名称:互換性識別子、タグ番号:1、データタイプ:2、データ数:Anyの1つだけである。

1stIFDのタグ
タグ名称 番号
(HEX)
データタイプ データ数
画像の幅 100 3or4  1
画像の高さ 101 3or4  1
画像のビットの深さ 102  3  3
圧縮の種類 103  3  1
画素構成 106  3  1
画像データのロケーション 111 3or4  *
コンポーネント数 115  3  1
タグ名称 番号
(HEX)
データタイプ データ数
ストリップ中のライン数 116 3or4  1
ストリップのデータ量 117 3or4  *
画像データの並び 11C  3  1
JPEG のSOI へのオフセット 201  4  1
JPEG データのバイト数 202  4  1
YCCの画素構成(Cの間引き率) 212  3  2
その他は0thIFDに同じ 

* サムネイルが非圧縮点順次画像の場合はそのストリップ数 など

○公式のEXIF規格書(CIPAへリンク)

(注)記載内容には十分注意をしたつもりですが、勘違いやミスタイプ等により誤りがあった場合はご容赦下さい。