English document

Exif形式の画像ファイル解説

現在、デジカメの新製品はほとんど全てExif形式で画像を保存するようになっています。この仕様策定はJEIDA(日本電子工業振興協会)が行っており、仕様自体は公開されているのですが、やはり日本の団体なため仕様書がインターネット等から入手できません。このためインターネット上で自由に入手できる文献等とほんの少しの自己解析によってExif仕様を解説したのがこのドキュメントです。

追記:2000年8月にExif2.1仕様書PIMAのwebsiteにて公開されました。Rev.1.3以降のドキュメントは基本的にこれに準拠した内容に訂正しました。

また最近になってISOでDCF(Design rule for Camera File system)という仕様が作られ、全てのデジカメメーカーはこれを採用する方向に動いています。DCFはメディアに保存する際のファイルシステムまでを含んだ包括的な仕様ですが、画像ファイルフォーマット自体はExif2.1に準拠し、それにいくつか変更を加えたものとなっています。

本ドキュメントは基本的にはExif2.1およびDCF仕様に準拠しているつもりですが、何か誤り、追記事項等がありましたら橘家鶴蔵 t s u r u z o h @ b a . w a k w a k . c o m までメールでお知らせ下さい。

このドキュメントはフリードキュメントです。商用・私用を問わず、ドキュメントの全部分および一部分の利用を含み、自由に使用、配付してかまいません。ただし内容の誤り等の訂正を行って配付される場合は、元のドキュメントも直したいので是非お知らせください。ドキュメント内で参照した会社名・製品名は、それぞれの企業の商標または登録商標です。

TsuruZoh Tachibanaya
t s u r u z o h @ b a . w a k w a k . c o m
http://park2.wakwak.com/‾tsuruzoh

rev. 1.4 Feb.03,2001, TsuruZoh Tachibanaya
rev. 1.3 Sep.10,2000, TsuruZoh Tachibanaya
rev. 1.2 Jul.19,2000, TsuruZoh Tachibanaya
rev. 1.1 Dec.19,1999, TsuruZoh Tachibanaya
rev. 1.0 May.28,1999, TsuruZoh Tachibanaya


参考文献等

itojun氏によるExif file format
大野 護氏によるExifファイル形式の解析
Adobe社によるTIFF6.0仕様書
ISO TC42 WG18によるTIFF/EP仕様書
Thierry Boush氏によるexifdumpプログラム
ISO TC42 WG18によるDCF仕様書
JEIDAによる、Exif2.1仕様書




Exif形式とは?

Exif画像の構造は基本的には通常のJPEG画像形式そのものであり、その中にサムネィル画像や撮影情報等のデーターをJPEGの規約に準拠した形で埋め込んだものです。よってJPEG形式をサポートしているインターネットブラウザー、画像ビュアー、フォトレタッチソフト等を使えば、Exif画像ファイルは通常のJPEG画像として見ることができます。

JPEG形式とマーカー

JPEGファイルは、必ず0xFFD8で始まり、0xFFD9で終わります。この他ファイル中にも0xFFXXという形式のデーターが散見しますが、これらはマーカーと呼ばれるJPEGデーターの区切り子です。0xFFD8はSOI(Start of image)、0xFFD9はEOI(End of image)という意味を持ちます。この2つは添付データーを持たないマーカーですが、それ以外のマーカーはその後にデーターを伴います。このためマーカーの基本形式は

0xFF+マーカー番号(1 byte)+データーサイズ(2 bytes)+データー(n bytes)

という形になります。データーサイズは、いわゆるモトローラ形式:大きい桁から順に並ぶ形式で格納されています。ここでデーター領域にはデーターサイズ表記のための2バイトも含まれている事に注意してください。ですから例えば

FF C1 00 0C

というマーカーが見つかったら、これは0xFFC1というマーカーの後に0x000C=12バイトのデーターが続くという意味になりますが、0x000cという2バイトもデーターの一部として数えるため、0x000Cの後には10バイトのデーターが続きます。このようにいくつかのマーカーによって画像の形式やデーターテーブル等が定義された後、イメージストリームの開始を示すSOS(Start of stream)マーカーが置かれ、その後イメージストリームデーターが続きます。まとめると下表のようになります。

SOI MarkerMarker XX size=SSSSMarker YY size=TTTTSOS Marker size=UUUUImage streamEOI Marker
FFD8FFXXSSSSDDDD......FFYYTTTTDDDD......FFDAUUUUDDDD....I I I I....FFD9

Exifに使われるマーカー

JPEGに使われるマーカーのうち、0xFFE0〜0xFFEFまでのマーカーは、アプリケーションマーカーと呼ばれ、これらはJPEGイメージをデコードするためには不要ですが、それぞれのアプリケーションプログラムで使用するためのデーター領域として定義されています。例えばオリンパス、CANON、CASIO等の旧機種で使われていたJFIF(JPEG File Interchange Format)という画像形式では、APP0(0xFFE0)というマーカーがサムネィル画像や撮影情報を格納するために使われます。

Exifでもこのアプリケーションマーカーを使い、画像情報等をJPEG画像内に格納しています。ただしExifではJFIFと間違われないように、APP1(0xFFE1)というマーカーを使用しています。Exif形式画像の最初の部分は、必ず次のような形式になっています。

SOI MarkerAPP1 MarkerAPP1 DataOther Marker
FFD8FFE1SSSS 457869660000 TTTT......FFXX SSSS DDDD......

0xFFD8で開始していますから通常のJPEG画像形式なのですが、次にすぐAPP1領域があるわけです。SSSS部分の2バイトがAPP1領域の大きさを示し、その後がAPP1のデーター領域となります。これも他のマーカー同様、SSSS部分も含めたサイズになっている点に注意してください。データーの最初の6バイトは、本当にExifであるかの識別子らしく、ASCII文字の"Exif"、その後2バイトの0x00が続きます。そこからTIFF形式でデーターが格納されています。TIFF形式の詳細については、前述のTIFF6.0仕様書を参照してください。

Exifが使用しているAPP1マーカー部が終わると、その後には通常のJPEG画像で使われているマーカーおよび画像のストリームデーターが続きます。

Exifデーター部の構造

Exifデーター部(APP1)の全体の構造は、通常は以下のような構成になっています。これはインテル形式のバイト並びで、サムネィル画像がJPEG形式の場合です。上に書いたように、データー部の最初(6バイト)は"Exif"の4文字+0x00が2バイトで、その後はTIFF形式のデーターが格納されています。

FFE1APP1 Marker
SSSSAPP1 DataAPP1 Data Size
45786966 0000Exif Header
49492A00 08000000TIFF Header
XXXX. . . . IFD0 (main image)Directory
LLLLLLLLLink to IFD1
XXXX. . . . Data area of IFD0
XXXX. . . .   Exif SubIFDDirectory
00000000End of Link
XXXX. . . . Data area of Exif SubIFD
XXXX. . . .   Interoperability IFDDirectory
00000000End of Link
XXXX. . . . Data area of Interoperability IFD
XXXX. . . . Makernote IFDDirectory
00000000End of Link
XXXX. . . . Data area of Makernote IFD
XXXX. . . . IFD1(thumbnail image)Directory
00000000End of Link
XXXX. . . . Data area of IFD1
FFD8XXXX. . . XXXXFFD9Thumbnail image

TIFFヘッダー部の構造

TIFF形式の最初の8バイトはヘッダー部です。最初の2バイトはバイト並びの形式を定義しています。0x4d4d:"MM"の場合はモトローラ形式、0x4949:"I I"の場合はインテル形式です。デジカメの場合インテル形式を使っているメーカーが多いのですが、RICOHはモトローラ形式を使っているようです。SONYはインテル形式ですが、D700だけはモトローラ形式です。KodakはDC-200/210/240はモトローラ形式なのですが、DC-220/260はCPUにPowerPCを使っているのに何故かインテル形式です。

例えば10進数で305,419,896という値は16進数で0x12345678と表記されますが、モトローラ形式の場合は0x12,0x34,0x56,0x78という順番で、インテル形式の場合は0x78,0x56,0x34,0x12という順番で格納されます。私見ですが、JPEGマーカーがモトローラ形式固定なのに、TIFF部分をモトローラ形式固定と定義しなかったのがExif仕様決定時の最大の誤りだと思います。

次の2バイトは、必ず2バイト長の0x002Aという値が入ります。よってインテル形式の場合は"0x2a,0x00"、モトローラ形式の場合は"0x00,0x2a"となります。ヘッダー部最後の4バイトは、最初のIFDへのオフセット値が入ります。この値も含めて、ExifのTIFF形式部において、オフセット値は全てTIFFデーターの開始点:"I I"または"MM"が格納されている場所から数えます。通常はこの後すぐに最初のIFDが始まるため、ここには0x00000008という値が入っています。インテル形式の場合は0x08,0x00,0x00,0x00、モトローラ形式の場合は0x00,0x00,0x00,0x08という並びになります。

Byte alignTAG MarkOffset to first IFD
"I I" or "MM"0x002a0x00000008

IFD : Image file directory

TIFFヘッダー部に続いて、最初のIFDデーターが格納されています。IFDとはImage file directoryの略です。通常のディ%9%/>e$K$"$k%G%#%l%/%H%j!<$HF1$8$h$&$J9=B$$G!"%$%a!<%8>pJs$r3JG<$7$F$$$^$9!#2
EEEENo. of directory entory
TTTTffffNNNNNNNNDDDDDDDDDirent 0
TTTTffffNNNNNNNNDDDDDDDDDirent 1
. . . . . . . . .. . . . . .
TTTTffffNNNNNNNNDDDDDDDDDirent EE-1
LLLLLLLLOffset to next IFD

上表のTTTT(2バイト)はタグ番号であり、データーの種類を示します。ffff(2バイト)はデーターの格納フォーマット、NNNNNNNN(4バイト)はデーターの個数を意味します。DDDDDDDD(4バイト)にはデーター値もしくはデーター値へのオフセット値が入ります。

データーフォーマット

上表ffffのデーター格納フォーマットは以下のように定義されています。rationalというのは分数で、signed longもしくはunsigned longの値が2つ、分子・分母の順で格納されています。

Value123456
Formatunsigned byteascii stringsunsigned shortunsigned longunsigned rationalsigned byte
Bytes/component112481
Value789101112
Formatundefinedsigned shortsigned longsigned rationalsingle floatdouble float
Bytes/component124848

データー1個あたりのバイト数と、NNNNNNNNに格納されているデーターの個数を掛けると、そのディレクトリーエントリーの総データー長が得られます。もし総データー長が4バイト以下ならばDDDDDDDD部にはデーター値自体が、4バイトを超える場合はデーターへのオフセット値が格納されます。つまり4文字以下の文字列や、2個以下のShort Integer等はDDDDDDDD部に即値が格納されるわけです。

実際のIFDデーター構造

Exif形式画像データーのTIFFデーターに最初に含まれるIFDがIFD0(IFD of main image)で、そこから次のIFD1(IFD of thumbnail image)へリンクされ、そこでリンクが終了します。ただしこれらのIFDの中には、撮影情報等の詳細なカメラデーターは含まれていません。Exif形式の場合、IFD0の中にはExif Offset(0x8769)という特殊なタグが必ず含まれています。このオフセット値が示すアドレスには、やはりIFD形式のデーター(Exif SubIFD)が格納されており、ここにカメラの詳細情報等が書かれています。

またExif2.1/DCF等で拡張されたExif形式の場合、そのExif SubIFDの中にさらにExif Interoperability Offset(0xa005)という特殊なTagが含まれており、これもIFD形式のデーター(Interoperability IFD)を格納しています。DCF仕様ではサムネィル画像のIFD1にもこのInteroperability IFDを付ける事が許されています。

デジカメのメーカー・機種によっては、Makernote(0x927c)というメーカー依存データーもIFD形式で格納している場合がありますので、1つの画像ファイルには最大6個のIFDが存在する場合があります。ただしMakernoteがIFD形式ではない場合もありますので、プログラムング時には要注意です。Makernoteについては、Appendixを参照ください。

0000: 49 49 2A 00 08 00 00 00-02 00 1A 01 05 00 01 00
0010: 00 00 26 00 00 00 69 87-04 00 01 00 00 00 11 02
0020: 00 00 40 00 00 00 48 00-00 00 01 00 00 00
では実際にTIFFデーター部の冒頭が上のようなデーターだったとして、これを解析してみます。
このようにしてIFDの内容を順次読んで行きます。

Exifのサムネィル画像

Exifデーターの中には、サムネィル画像も含まれています(Ricoh DC-3Zを除く)。通常はIFD1(IFD of thumbnail image)データーの後にサムネィル画像が添付されています。ただしExifの実装によって実際のデジカメにおけるサムネィル画像にはJPEG形式、TIFFのRGB形式、TIFFのYCbCr形式の3種類が存在します。Exif2.1以降においては、サムネィルとしてJPEG形式で160x120ピクセルの画像サイズが推奨されているようです。またDCF仕様では、必ずJPEG形式で160x120ピクセルの画像サイズを使うこと、と決められています。

JPEG形式のサムネィル画像

IFD1のCompression(0x0103)タグの値が'6'の場合、サムネィル画像にはメイン画像と同じくJPEG形式が使われています。この場合サムネィル画像の開始点はIFD1のJpegIFOffset(0x0201)タグ、画像サイズはJpegIFByteCount(0x0202)タグによって得られます。データーは通常のJPEG形式なので、FFD8(SOI Marker)で開始し、FFD9(EOI Marker)で終了しています。

TIFF形式のサムネィル画像

IFD1のCompressionタグの値が'1'の場合、サムネィル画像にはTIFF非圧縮形式が使われています。サムネィル画像の開始点はIFD1のStripOffset(0x0111)タグの値になります。サムネィル画像のデーターサイズはStripByteCounts(0x0117)バイトの値の合計となります。とは言っても通常サムネィル画像データーは分d$;$:$K3JG<$5$l$F$$$^$9$,!#

TIFF非圧縮形式が用いられている場合、IFD1のPhotometricInterpretation(0x0106)タグの値が'2'の時は格納形式がRGBとなり、そのままパソコンのRGB形式(BMP形式等)へコピーするだけで画像表示が可能です。ただしTIFF形式は画素データーが'R','G','B'の順で格納されていますが、BMP形式では'B','G','R'と順序が逆になっているので注意が必要です。DC-210/220/260等はこの形式です。これが'6'の場合は、YCbCr形式となり、RGBへの変換は若干面倒です。この形式が使われているのはRicoh DC-4シリーズ、FujiFilmDSシリーズ等です。ここではDSシリーズの場合の変換法について簡単に説明します。詳細については、TIFF6.0仕様書等を参照ください。

DS10/20/30の場合、YCbCrSubsampling(0x0212)が'2,1'、PlanarConfiguration(0x011c)が'1'なので、画像データーの最初の部分は

Y(0,0),Y(1,0),Cb(0,0),Cr(0,0), Y(2,0),Y(3,0),Cb(2,0),Cr(3.0), Y(4,0),Y(5,0),Cb(4,0),Cr(4,0). . . .

の順で並んでいます。ここでカッコ内は画素の座標を表しています。またYCbCrCoefficients(0x0211)は'0.299/0.587/0.114'、ReferenceBlackWhite(0x0214)は'0,255,128,255,128,255'ですので、Y/Cb/CrからRGBに変換するには

B(0,0)=(Cb-128)*(2-0.114*2)+Y(0,0)
R(0,0)=(Cr-128)*(2-0.299*2)+Y(0,0)
G(0,0)=(Y(0,0)-0.114*B(0,0)-0.299*R(0,0))/0.587

という演算を行います。ここで水平方向の色のサブサンプリングが2なので、Y(1,0)にも同じCr(0,0)/Cb(0,0)の値を使い、横2ピクセル分のRGBを計算します。これをImageWidth(0x0100)、ImageLength(0x0101)タグの値だけ繰り返せばサムネィル画像ができます。

Exif/TIFFで使われるTag番号

Exif/TIFFで使われるTag番号は、以下のとおりです。実際にデジカメで使われているTagについては説明を付けてあります。そのTagのデーター個数の上限がある場合は、それをCompoNoには書いてあります。値が書いていない場合は制限がありません。

IFD0 (main image) で使われているTag
Tag No.Tag NameFormatCompoNoDesc.
0x010eImageDescription ascii string
この画像についての説明が入ります。漢字等の2バイト文字の使用は禁止です。
0x010fMake ascii string
カメラのメーカー名を示します。Exif2.1ではオプションでしたが、DCFでは必須タグになりました。
0x0110Model ascii string
カメラの機種名を示します。Exif2.1ではオプションでしたが、DCFでは必須タグになりました。
0x0112Orientation unsigned short1
Value0th Row0th Column
1topleft side
2topright side
3bottomright side
4bottomleft side
5left sidetop
6right sidetop
7right sidebottom
8left sidebottom
画像データーがどこを起点として、どの向きで格納されているかを示します。
格納されている「0行目」(0th Row)と「0桁目」(0th Column)が画面上のどの位置に配置されるかを表にすると、右表のようになります。デフォルト値は'1':左上から描画です。
0x011aXResolution unsigned rational1 画像の表示・印刷時の分解能を示します。デフォルト値は1/72inch(72dpi)ですが、パソコンの場合実際にその分解能で印刷や画像表示される訳ではないので、この値自体はあまり意味がないです。
0x011bYResolution unsigned rational1
0x0128ResolutionUnit unsigned short1 XResolution(0x011a)/YResolution(0x011b)の分解能の単位を示します。1は単位なし、2はインチ、3はセンチメートルです。デフォルトは'2'(inch)です。
0x0131Software ascii string
デジカメのファームウェア(内蔵ソフトウェア)の版数を示します。
0x0132DateTime ascii string20 この画像が最後に変更された日時を示します。形式は"YYYY:MM:DD HH:MM:SS"+0x00で、合計20バイトになります。時計が設定されていない等の理由で日時が不明な場合は、数値部分は空白文字(Space)で埋められます。通常はDateTimeOriginal(0x9003)と同じ値になっています。
0x013eWhitePoint unsigned rational2 白点の色度を定義します。もしもCIE Standard Illuminant D65(いわゆる昼光色の世界標準値です)という値を使っていれば、'3127/10000,3290/10000'という値が入っています。
0x013fPrimaryChromaticities unsigned rational6 原色の色度を定義します。CCIR REcommendation 709 primariesという値を使っている場合は、'640/1000,330/1000,300/1000,600/1000,150/1000,60/1000'という値が入っています。
0x0211YCbCrCoefficients unsigned rational3 イメージがYCbCr形式で格納されている場合(JPEGはこの形式です)に、それをRGBデーターに変換するための定数を示します。通常は0.299、0.587、0.114という値が使われます。
0x0213YCbCrPositioning unsigned short1 色情報のサンプリングを間引きしている場合(通常のデジカメは全てこれを行っています)に、色情報のサンプルポイントがどこになるかを示します。'1'の場合、サンプルポイントは間引きされた点集合の中央、'2'の場合は点集合の原点になります。
0x0214ReferenceBlackWhite unsigned rational6 画像情報の黒点・白点値を示します。YCbCr形式の場合、最初の2つの値がY(輝度)の黒点・白点、次がCb、最後がCrとなり、デフォルト値は'0,255,0,128,0,128'です。RGB形式の場合はR、G、Bの順で黒点・白点値が並んでおり、デフォルト値は'0,255,0,255,0,255'です。
0x8298Copyright ascii string
この画像の著作権情報が入ります。
0x8769ExifIFDPointer unsigned long1 Exif Sub IFDへのオフセットを示します。


Exif SubIFD で使われているTag
Tag No.Tag NameFormatCompoNoDesc.
0x829aExposureTime unsigned rational1 露光時間(シャッター速度の逆数)が入っています。単位は秒です。
0x829dFNumber unsigned rational1 レンズのF値が入っています。
0x8822ExposureProgram unsigned short1 露光制御のモードが入っています。'1'はマニュアル設定、'2'は通常のプログラムAE、'3'は絞り優先、'4'はシャッター速度優先、'5'は低速プログラム、'6'は高速プログラム、'7'はポートレートモード、'8'は風景モードとなっています。
0x8827ISOSpeedRatings unsigned short2 CCD感度の銀塩フィルム換算値が入っています。
0x9000ExifVersion undefined4 Exif形式のバージョンが4バイトのASCII文字("0210"等)で格納されています。このデーターはヌル(0x00)で終わっていないので、データー形式としてはAsciiStringではなくUndefinedが使われます。J
0x9003DateTimeOriginal ascii string20 オリジナル画像が撮影された日時を示します。形式は"YYYY:MM:DD HH:MM:SS"+0x00で、合計20バイトになります。時計が設定されていない等の理由で日時が不明な場合は、数値部分は空白文字(Space)で埋められています。この値は設定後は変更不可という仕様になっています。Exif2.1ではオプションでしたが、DCFでは必須タグになりました。
0x9004DateTimeDigitized ascii string20 画像が撮影後にデジタル化された日時を示します。形式は"YYYY:MM:DD HH:MM:SS"+0x00で、合計20バイトになります。時計が設定されていない等の理由で日時が不明な場合は、数値部分は空白文字(Space)で埋められています。通常はDateTimeOriginal(0x9003)と同じ値が入っています。Exif2.1ではオプションでしたが、DCFでは必須タグになりました。
0x9101ComponentsConfiguration undefined4 格納されているデーターの並びを示します。0:not exist,1:Y,2:Cb,3:Cr,4:R,5:G,6:Bを意味します。RGB形式の画像の場合は'0x04,0x05,0x06,0x00'、YCbCr形式の場合は'0x01,0x02,0x03,0x00'という値になります。
0x9102CompressedBitsPerPixel unsigned rational1 画像のJPEGによる圧縮率を示します。あまり正確な値ではありません。
0x9201ShutterSpeedValue signed rational1 シャッター速度がAPEX値で入っています。この値の2のベキ乗をとって逆数にすると、通常のシャッター速度表示になります。例えば'4'の場合だと1/(24)=1/16秒です。
0x9202ApertureValue unsigned rational1 レンズ絞り値がAPEX値で入っています。この値のルート2のベキ乗を取ると、通常の絞り値となります。例えば'5'の場合だと√25=F5.6です。
0x9203BrightnessValue signed rational1 画像撮影時の撮影対象物の明るさが入っています。単位はAPEX値です。EVにするにはISO感度の値を足す必要があり、Ev:Exposure, Bv:BrightnessValue, Sv:SensitivityValueとして
Ev=Bv+Sv   Sv=log2(ISOSpeedRating/3.125)
という計算式を使います。ISO感度100の場合Sv=5、ISO200の場合Sv=6、ISO125ではSv=5.32です。
0x9204ExposureBiasValue signed rational1 撮影時の露光補正量が入っています。単位はAPEX値(EV)です。
0x9205MaxApertureValue unsigned rational1 レンズの開放F値が入っています。ApertureValue同様、ルート2のベキ乗を取ると通常の絞り値に換算できます。
0x9206SubjectDistance signed rational1 被写体までの距離が入っています。単位はmです。
0x9207MeteringMode unsigned short1 自動露出の測光モードを示します。'0'は不明、'1'は平均測光、'2'は中央重点、'3'はスポット、'4'は多点スポット、'5'はマルチセグメント、'6'は部分測光、'255'はその他です。
0x9208LightSource unsigned short1 光源を示します。これはマニュアルでホワイトバランスを設定した場合のモード値となります。'0'は光源不明、'1'は昼光、'2'は蛍光燈、'3'は白熱電球、'10'はフラッシュ、'17'は標準ライトA、'18'は標準ライトB、'19'は標準ライトC、'20'はD55、'21'はD65、'22'はD75、'255'はその他の光源です。
0x9209Flash unsigned short1 フラッシュ発光の状態を示します。'0'はフラッシュ非発光、'1'はフラッシュ発光(反射光検出機構なし)、'5'は発光したが反射光は検出できなかった、'7'は発光して反射光が検出できた事を意味します。
0x920aFocalLength unsigned rational1 レンズの焦点距離が入っています。単位はmmです。
0x927cMakerNote undefined
カメラの内部情報等、メーカー依存データーが格納されています。Olympus/Nikon/Sanyo等、一部メーカーの場合は、このデーターもIFD形式で格納されています。Appendixを参照してください。
0x9286UserComment undefined
ユーザーコメントが格納されます。ImageDescriptionタグと違って、こちらはJIS2バイトコード、Unicode等での記述が許されており、最初の8バイトが文字コードを示します。
'0x41,0x53,0x43,0x49,0x49,0x00,0x00,0x00':ASCII
'0x4a,0x49,0x53,0x00,0x00,0x00,0x00,0x00':JIS
'0x55,0x4e,0x49,0x43,0x4f,0x44,0x45,0x00':Unicode
'0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00':Undefined
0x9290SubsecTime ascii string
デジカメによっては1秒間に2〜30コマの画像を撮影できます。しかしDateTime/DateTimeOriginal/DateTimeDigitizedタグでは秒の単位までしか記録できないため、小数点以下の時刻を記録するのに使われます。
例えば DateTimeOriginal = "1996:09:01 09:15:30", SubSecTimeOriginal = "130" の時、2つを合成したOriginal時間は "1996:09:01 09:15:30.130" という値です。
0x9291SubsecTimeOriginal ascii string
0x9292SubsecTimeDigitized ascii string
0xa000FlashPixVersion undefined4 フラッシュピックスのバージョンが入ります。FlashPix formar Ver.1.0に準拠している場合はASCIIキャラクターの"0100"が入っています。このデーターはヌル(0x00)で終わっていないので、データー形式としてはAsciiStringではなくUndefinedが使われます。
0xa001ColorSpace unsigned short1 使われる色空間を示します。DCFの場合は必ずsRGBを使用しますので、'1'が入ってます。sRGB以外の色空間を使用している場合は、'65535':Uncalibratedとなります。
0xa002ExifImageWidth unsigned short/long1 メイン画像の大きさが入ります。
0xa003ExifImageHeight unsigned short/long1
0xa004RelatedSoundFile ascii string
画像と一緒に音声録音できる機種の場合に、音声ファイルの名前が入ります。
0xa005InteroperabilityIFDPointer unsigned long1 ExifR98/DCF仕様における拡張データーを格納するためのものです。IFD形式のデーター(Interoperability IFD)へのオフセットが入っています。DCF仕様では必須タグとなっています。
0xa20eFocalPlaneXResolution unsigned rational1 撮影画像のCCD位置での画素密度を示します。この値とFocalLengthを使うと、レンズ焦点距離の35mmカメラ換算値が計算できます。例えば200万画素機を使いVGAモードの画像を撮ったような場合はこの値はVGAの解像度でリサンプルされた値になっており、CCDの画素ピッチそのままの値ではありませんので注意が必要です。
0xa20fFocalPlaneYResolution unsigned rational1
0xa210FocalPlaneResolutionUnit unsigned short1 CCD画素密度の単位を示します。'1'が単位なし、'2'がインチ、'3'がセンチメートルです。デフォルトは'2'(inch)です。

注:Fujifilm Finepix2700/2900Z/4700Z/40i等は値が'3'なので単位がセンチメートルの筈なのですが、実際は8.3mm相当(1/3in.?)になっているようです。Bugでしょうか?FinePix4900Zからは'2'(インチ)に変更されていますが、やはり計算が合わないようです。
0xa215ExposureIndex unsigned rational1 CCD感度を示します。データー形式が符号なし分数である事を除き、ISOSpeedRatings(0x8827)と同じです。何故かKodakのデジカメはISOSpeedRatingsのかわりにこのTagを使っています。歴史的な理由でしょうか?
0xa217SensingMethod unsigned short1 イメージセンサーの形式を示します。'1'は未定義、'2'は1チップカラーエリアセンサー、'3'は2チップカラーエリアセンサー、'4'は3チップカラーエリアセンサー、'5'はカラーシークェンシャルエリアセンサー、'6'は未定義、'7'はトリリニアセンサー、'8'はカラーシクェンシャルリニアセンサーです。
0xa300FileSource undefined1 画像がどういうデバイスから得られたかを示します。'0x03'はデジタルカメラで撮影された画像を意味します。
0xa301SceneType undefined1 画像がどうやって撮られたかを示します。'0x01'は直接撮影された画像を意味します。
0xa302CFAPattern undefined
CCDに付いているColor filter array(CFA)のパターンを示します。データーの構造は下表のようになっています。
LengthTypeMeaning
2shortHorizontal repeat pixel unit = n
2shortVertical repeat pixel unit = m
1byteCFA value[0,0]
:
:
:
1byteCFA value[n-1,0]
1byteCFA value[0,1]
:
:
:
1byteCFA value[n-1,m-1]

フィルター色とCFA valueの対応は下表の通りです。
Filter ColorRedGreenBlueCyanMagentaYellowWhite
CFA value0123456

RG
GB
例えば普通のRGBフィルターですと、フィルター配列は左図の繰り返しですから、CFAPatternのデーターは '0x0002,0x0002,0x00,0x01,0x01,0x02' となります。


Interoperability IFD で使われているTag
Tag No.Tag NameFormatCompoNoDesc.
0x0001 InteroperabilityIndex Ascii string 4 もしもこのIFDがメイン画像のInteroperability IFDで、データーの内容がExifR98 v1.0準拠の場合は、"R98"の文字列が入っています。サムネィル画像のInteroperability IFDの場合は、"THM"の文字列が入っています。
0x0002 InteroperabilityVersion Undefined 4 データーの内容がExifR98 v1.0準拠の場合は、"0100"の文字列が入っています。
0x1000 RelatedImageFileFormat Ascii string any 画像フォーマットが'Exif JPEG Ver. 2.1'のように文字列で入っています。通常はサムネィル画像に使われます。
0x1001 RelatedImageWidth Short or Long 1 画像サイズが入っています。通常はサムネィル画像のInteroperability IFDに使われます。
0x1001 RelatedImageLength Short or Long 1


IFD1 (thumbnail image) で使われているTag
Tag No.Tag NameFormatCompoNoDesc.
0x0100ImageWidth unsigned short/long1 サムネィル画像のサイズを示します。
0x0101ImageLength unsigned short/long1
0x0102BitsPerSample unsigned short3 画像が非圧縮形式の場合に、RGBそれぞれのピクセルあたりの分解能を示します。デフォルト値は8,8,8です。
0x0103Compression unsigned short1 画像の圧縮形式を示します。'1'が非圧縮、'6'がJPEG圧縮です。
0x0106PhotometricInterpretation unsigned short1 画像が非圧縮形式の場合に、画像の形式を示します。'2'はRGB、'6'はYCbCr形式を示します。
0x0111StripOffsets unsigned short/long
非圧縮イメージ形式の場合、画像データーが格納されている場所へのオフセットを示します。画像がいくつかに分割して格納されている場合、この値は複数になります。
0x0112Orientation unsigned short1 画像データーがどこを起点として、どの向きで格納されているかを示します。
詳細については、IFD0で使われているTagの中のOrientationタグの説明を参照してください。
0x0115SamplesPerPixel unsigned short1 非圧縮イメージの場合、1ピクセルあたりにいくつのデーターが使われているかを示します。RGB/YCbCrカラーイメージの場合は'3'になります。
0x0116RowsPerStrip unsigned short/long1 非圧縮イメージをいくつかのストリップ(横方向へのぶった切り)に分割して格納している場合に、それぞれの分割データーあたりの横ライン数を示します。分割していない場合は、全ライン数と同じ数が格納されます。
0x0117StripByteConunts unsigned short/long
非圧縮イメージを分割して格納している場合に、それぞれの分割データーのバイト数を示します。分割していない場合は、総データーサイズが1つだけ格納されます。
0x011aXResolution unsigned rational1 画像の表示・印刷時の分解能を示します。デフォルト値は1/72inch(72dpi)ですが、パソコンの場合実際にその分解能で印刷や画像表示される訳ではないので、この値自体はあまり意味がないです。
0x011bYResolution unsigned rational1
0x011cPlanarConfiguration unsigned short1 非圧縮イメージがYCbCr形式で格納されている場合に、Y/Cb/Crがどのような並びで格納されているかを示します。'1'の場合(chunky format)、サブサンプリングの点集合ごとにY/Cb/Crを並べて格納されます。'2'の場合(planar format)、全てのYデーター、全てのCrデーター、全てのCbデーターの順にそれぞれ分けて格納されます。
0x0128ResolutionUnit unsigned short1 XResolution(0x011a)/YResolution(0x011b)の分解能の単位を示します。'2'はインチ、'3'はセンチメートルです。デフォルトは'2'(inch)です。
0x0201JpegInterchangeFormat unsigned long1 サムネィル画像の圧縮形式がJPEGの場合に、JPEG画像データーが格納されている場所へのオフセットを示します。
0x0202JpegInterchangeFormatLength unsigned long1 サムネィル画像の圧縮形式がJPEGの場合に、JPEG画像データーのデーターサイズを示します。
0x0211YCbCrCoefficients unsigned rational3 イメージがYCbCr形式で格納されている場合に、それをRGBデーターに変換するための定数を示します。通常は0.299、0.587、0.114という値が使われます。
0x0212YCbCrSubSampling unsigned short2 イメージがYCbCr形式で格納され、色情報のサンプリングを間引きしてファイルサイズを小さくしている場合、それをいくつ間引きしているかを示します。最初の値が水平方向、次の値が垂直方向の間引き率です。'2,1'の場合はYCbCr4:2:2、'2,2'の場合はYCbCr4:2:0です。
0x0213YCbCrPositioning unsigned short1 色情報のサンプリングを間引きしてファイルサイズを小さくしている場合に、色情報のサンプルポイントがどこになるかを示します。'1'の場合(centered)、サンプルポイントは間引きされた点集合の中央、'2'の場合(co-sited)は点集合の原点になります。
0x0214ReferenceBlackWhite unsigned rational6 画像情報の黒点・白点値を示します。YCbCr形式の場合、最初の2つの値がY(輝度)の黒点・白点、次がCb、最後がCrとなります。RGB形式の場合はR、G、Bの順で黒点・白点値が並んでいます。


その他のTag
Tag No.Tag NameFormatCompoNoDesc.
0x00feNewSubfileType unsigned long1
0x00ffSubfileType unsigned short1
0x012dTransferFunction unsigned short3
0x013bArtist ascii string

0x013dPredictor unsigned short1
0x013eWhitePoint unsigned rational2
0x013fPrimaryChromaticities unsigned rational6
0x0142TileWidth unsigned short1
0x0143TileLength unsigned short1
0x0144TileOffsets unsigned long

0x0145TileByteCounts unsigned short

0x014aSubIFDs unsigned long

0x015bJPEGTables undefined

0x828dCFARepeatPatternDim unsigned short2
0x828eCFAPattern unsigned byte

0x828fBatteryLevel unsigned rational1
0x83bbIPTC/NAA unsigned long

0x8773InterColorProfile undefined

0x8824SpectralSensitivity ascii string

0x8825GPSInfo unsigned long1
0x8828OECF undefined

0x8829Interlace unsigned short1
0x882aTimeZoneOffset signed short1
0x882bSelfTimerMode unsigned short1
0x920bFlashEnergy unsigned rational1
0x920cSpatialFrequencyResponse undefined

0x920dNoise undefined

0x9211ImageNumber unsigned long1
0x9212SecurityClassification ascii string1
0x9213ImageHistory ascii string

0x9214SubjectLocation unsigned short4
0x9215ExposureIndex unsigned rational1
0x9216TIFF/EPStandardID unsigned byte4
0x9290SubSecTime ascii string

0x9291SubSecTimeOriginal ascii string

0x9292SubSecTimeDigitized ascii string

0xa20bFlashEnergy unsigned rational1
0xa20cSpatialFrequencyResponse unsigned short1
0xa214SubjectLocation unsigned short1


Appendix 1: OlympusのMakerNote

以下のデーターは、Peter Esherick氏がOlympus D450Z(日本名C-920Z)にて調べたものです。

OlympusのMakerNoteは"OLYMP"という文字列で始まっています。冒頭から8バイト目以降はIFD形式のデーターとなっており、D450Zの場合は11個のデーターエントリーがあります。実際のデーターは以下のようになっています。
:0000: 4F 4C 59 4D 50 00 01 00-0B 00 00 02 04 00 03 00  OLYMP...........
:0010: 00 00 0E 04 00 00 01 02-03 00 01 00 00 00 03 00  ................

Tag No.Tag NameFormatCompoNoValue
0x0200SpecialModeUnsigned Long3撮影モードを示します。最初の値は0=通常モード,1=不明,2=速写モード,3=パノラマモード、次の値はパノラマの場合の通し番号、最後の値はパノラマの方向で、1=左から右、2=右から左、3=下から上、4=上から下を意味します。
0x0201JpegQualUnsigned Short1撮影品質を示します。1=SQ,2=HQ,3=SHQです。
0x0202MacroUnsigned Short1撮影モードを示します。0=標準撮影、1=マクロモードです。
0x0203UnknownUnsigned Short1不明です。
0x0204DigiZoomUnsigned Rational1デジタルズームの比率を示します。D450Zの場合、0=なし、2=2倍ズームとなります。
0x0205UnknownUnsigned Rational1不明です。
0x0206UnknownSigned Short6不明です。
0x0207SoftwareReleaseAscii string5デジカメのファームウェア(内蔵ソフトウェア)版数が入っています。
0x0208PictInfoAscii string52[PctureInfo]等の文字列が入っています。これはExif形式を使っていなかった頃のOlympusデジカメと同じデーター形式です。
0x0209CameraIDUndefined32Cameや旧版のOlympus接続キットソフトウェア等で書き換え可能だったCameraID領域の値が入っています。
0x0f00DataDumpUnsigned Long30詳細不明ですが、たくさんのデーターが入っています。


Appendix 2: NikonのMakerNote

NikonのMakerNoteには2系統あります。E700/E800/E900/E900S/E910/E950は、冒頭に"Nikon"というASCII文字列が入っており、8バイト目からがIFD形式のデーターとなっています。これはAppendix 1で紹介したOlympusの形式と先頭の文字列を除き全く同じフォーマットです。以下はE900の実際のデーター例です。
:0000: 4E 69 6B 6F 6E 00 01 00-05 00 02 00 02 00 06 00 Nikon...........
:0010: 00 00 EC 02 00 00 03 00-03 00 01 00 00 00 06 00 ................

Tag No.Tag NameFormatCompoNoValue
0x0002UnknownAscii string6詳細不明ですが、E900/900S/910の場合は"09.41"、それ以外は"08.00"という文字列が入っています。
0x0003QualityUnsigned short1撮影モードを示します。E900の場合ですと、'1'〜'3'がVGA、'4'〜'6'がSXGAの、BASIC/NORMAL/FINEです。
0x0004Color ModeUnsigned short1カラー撮影の場合は'1'、白黒撮影の場合は'2'という値が入っています。
0x0005Image AdjustmentUnsigned short1撮影設定が入っています。0はNormal、1はBright+、2はBright-、3はContrast+、4はContrast-を意味します。
0x0006CCD SensitivityUnsigned short1CCD感度設定を示します。0:ISO80, 2:ISO160, 4:ISO320, 5:ISO100です。
0x0007White balanceUnsigned short1ホワイトバランス設定が入っています。0:Auto, 1:Preset, 2:Daylight, 3:Incandescense, 4:Fluorescence, 5:Cloudy, 6:SpeedLightです。
0x0008FocusUnsigned rational1無限遠固定の場合は1/0という値が入っています。
0x0009UnknownAscii string20不明ですが、今の所空白が入っているようです。
0x000aDigital ZoomUnsigned rational1デジタルズーム比率が入っています。例えば1.6倍デジタルズームの場合は'160/100'という値になります。ディジタルズーム無しの場合は'0/100'という値になっています。
0x000bConverterUnsigned short1Fisheye Converterを使うと'1'になります。
0x0f00UnknownUnsigned long25〜30不明ですが、色々な値がたくさん入っています。

これに対してE990の場合は、先頭に"Nikon"の文字がなく、1バイト目から通常のIFDと全く同じ形式で格納されています。これはNikon D1のJPEG形式と同じフォーマットです。以下の例はE990の実際のデーターです。
:0000: 10 00 01 00 07 00 04 00-00 00 00 01 00 00 02 00  ................
:0010: 03 00 02 00 00 00 00 00-64 00 03 00 02 00 06 00  ........d.......

以下のデーターは、Max Lyons氏がNikon E990にて調べたものです。

Tag No.Tag NameFormatCompoNoValue
0x0001UnknownUndefined4不明ですが、いつも"0100"が入っているようです。
0x0002ISO SettingUnsigned short20,100=ISO 100
0,200=ISO200
0,400=ISO400
です。
0x0003Color ModeAscii stringvaries撮影カラーモードを示します。"COLOR"、"B&W"等の文字列が入っています。
0x0004QualityAscii stringvaries撮影時のQualityモードを示します。"NORMAL", "FINE", "BASIC" 等の文字列が入っています。
0x0005WhitebalanceAscii stringvariesホワイトバランス設定を示します。"AUTO", "WHITE PRESET" 等の文字列が入っています。
0x0006Image SharpeningAscii stringvariesシャープネス設定を示します。"AUTO", "HIGH" 等の文字列が入っています。
0x0007Focus ModeAscii stringvariesオートフォーカスのモードを示します。"AF-S"(Single AF)、"AF-C"(Continuous AF)等の文字列が入っています。
0x0008Flash SettingAscii stringvariesフラッシュの設定を示します。"NORMAL", "RED-EYE" 等の文字列が入っています。
0x000aUnknownUnsigned rational1不明ですが、いつも'8832/1000'という値のようです。
0x000fISO SelectionAscii stringvariesISO感度の選択方法を示します。"MANUAL", "AUTO"(自動ゲインアップ)等の文字列が入っています。
0x0080Image AdjustmentAscii stringvaries画像モード設定を示します。"AUTO", "NORMAL", "CONTRAST(+)" 等の文字列が入っています。
0x0082AdapterAscii stringvaries"FISHEYE 2"、"WIDE ADAPTER"等、レンズコンバーターの種類を示します。
0x0085Manual Forcus DistanceUnsigned rational1マニュアルフォーカスモードの時の、フォーカス距離を示します。単位は[m]です。マニュアルフォーカスモードでない場合は'0/0'になっています。
0x0086Digital ZoomUnsigned rational1デジタルズーム時のズーム比率を示します。'100/100'ならば光学ズームのみ、'140/100'という値になっていれば、1.4x digital zoomです。
0x0088AF Focus PositionUndefined4オートフォーカスの測距位置を示します。'0,0,0,0':中央、'0,1,0,0':上、'0,2,0,0':下、'0,3,0,0':左、'0,4,0,0':右で測距します。
0x0010Data DumpUndefined174何だか分かりませんが、たくさんのデーターが入っています。


Appendix 3: CasioのMakerNote


Casioのデジカメは、QV2000/QV8000以降の機種でExif形式を使うようになりました。CasioのMakerNoteはNikon E990同様、一般のIFDと全く同じ形式です。実際のデーターは以下のようになっています。
:0000: 00 14 00 01 00 03 00 00-00 01 00 0A 00 00 00 02 ................
:0010: 00 03 00 00 00 01 00 03-00 00 00 03 00 03 00 00 ................
以下のデーターは、Eckhard Henkel氏がCasio QV-3000EXにて調べたものです。

Tag No.Tag NameFormatCompoNoValue
0x0001RecordingModeUnsigned Short1撮影モードを示します。1:Single Shutter, 2:Panorama, 3:Night Scene, 4:Portrait, 5:Landscape を意味します。
0x0002QualityUnsigned Short1画像クォリティを示します。1:Economy, 2:Normal, 3:Fine を意味します。
0x0003Focusing ModeUnsigned Short1フォーカスモードを示します。2:Macro, 3:Auto Focus, 4:Manual Focus, 5:Infinity を意味します。
0x0004Flash ModeUnsigned Short1フラッシュ発光モードを示します。1:Auto, 2:On, 3:Off, 4:Red Eye Reduction を意味します。
0x0005Flash IntensityUnsigned Short1フラッシュ発光強度を示します。11:Weak, 13:Normal, 15:Strongを意味します。
0x0006Object distanceUnsigned Long1被写体までの距離を示します。単位は[mm]です。
0x0007White BalanceUnsigned Short1ホワイトバランス設定を示します。1:Auto, 2:Tungsten, 3:Daylight, 4:Fluorescent, 5:Shade, 129:Manual を意味します。
0x0008UnknownUnsigned short1不明です。
0x0009UnknownUnsigned short1不明です。バルブ設定でしょうか?
0x000aDigital ZoomUnsigned Long1デジタルズーム設定を示します。0x10000(65536)が'Off'、0x10001(65537)が'2X'です。
0x000bSharpnessUnsigned Short1シャープネス設定を示します。0:Normal, 1:Soft, 2:Hard を意味します。
0x000cContrastUnsigned Short1コントラスト設定を示します。0:Normal, 1:Low, 2:High を意味します。
0x000dSaturationUnsigned Short1飽和設定を示します。0:Normal, 1:Low, 2:Highを意味します。
0x000eUnknownUnsigned short1不明です。
0x000fUnknownUnsigned short1不明です。
0x0010UnknownUnsigned short1不明です。
0x0011UnknownUnsigned long1不明です。
0x0012UnknownUnsigned short1不明です。
0x0013UnknownUnsigned short1不明です。
0x0014CCD SensitivityUnsigned short1CCD感度設定を示します。QV3000の場合、64:Normal, 125:+1.0, 250:+2.0, 244:+3.0 という設定値です。QV8000/2000の場合、80:Normal, 100:High という設定値です。

Appendix 4: FujifilmのMakerNote


Fujifilmのデジカメはデジカメ黎明期のVGA機DS-7の頃から既にExif形式を使っていましたが、Finepix1400,Finepix4700等の2000年発売以降の機種からは他社と同様MakerNoteを使いメーカー固有情報を格納するようになりました。FujifilmのMakerNoteはOlympusやNikonの旧機種と同じように、冒頭にメーカー名が入り8バイト目からデーターが始まるIFD形式です。実際のデーターは以下のようになっています。
:0000: 46 55 4A 49 46 49 4C 4D-0C 00 00 00 0F 00 00 00 :0000: FUJIFILM........
:0010: 07 00 04 00 00 00 30 31-33 30 00 10 02 00 08 00 :0010: ......0130......

FujifilmのMakerNoteを解析する上で、他社のMakerNoteと大きく違っている点が2つあります。
何と言うかこれは'Bug'だと思いますが、最初に出した機種がこうなっている以上、それ以降の機種も同じにしないと互換が取れません。しょうがないですね。以下のデーターは、FinePix4900Zで調べたものです。

Tag No.Tag NameFormatCompoNoValue
0x0000VersionUndefined4MakerNote情報のバージョンを示します。現在は'0130'という文字が入っています。
0x1000QualityAscii string8画像クォリティを示します。"BASIC","NORMAL","FINE"という文字列です。
0x1001SharpnessUnsigned Short1画像シャープネス設定を示します。1or2:シャープネス弱, 3:シャープネス標準, 4or5:シャープネス強を意味します。
0x1002White BalanceUnsigned Short1ホワイトバランス設定を示します。0:Auto, 256:Daylight, 512:Cloudy, 768:昼光色蛍光灯, 769:昼白色蛍光灯, 770:白色蛍光灯, 1024:白熱電球, 3840:カスタムホワイトバランス を意味します。
0x1003ColorUnsigned Short1彩度(色の濃さ)設定を示します。0:normal(STD), 256:High, 512:Low(ORG)を意味します。
0x1004ToneUnsigned Short1コントラスト設定を示します。0:normal(STD), 256:High(HARD), 512:Low(ORG)を意味します。
0x1010Flash ModeUnsigned Short1フラッシュ発光モードを示します。0:自動発光, 1:強制発光, 2:発光禁止, 3:赤目防止を意味します。
0x1011Flash StrengthSigned Rational1フラッシュの発光強度補正値を示します。単位はEVで、-6/10, -3/10, 0/10, 3/10, 6/10 等の値が入っています。
0x1020MacroUnsigned Short1マクロモード設定を示します。0:Off, 1:On を意味します。
0x1021Focus modeUnsigned short10:Auto Focus, 1:Manual Focusを意味します。
0x1030SlowSync.Unsigned short1スローシンクロモードを示します。0:Off, 1:On を意味します。
0x1031Picture ModeUnsigned short1撮影モードを示します。0:auto, 1: portrait, 2:landscape, 4:sports, 5:nightscene, 6:program AE, 256:aperture prior AE, 512:shutter prior AE, 768:manual を意味します。
0x1032unknownUnsigned Short1不明です。
0x1100ContTake/BracketUnsigned Short1連写または自動ブラケットモードを示します。0:off, 1:on を意味します。
0x1200unknownUnsigned Short1不明です。
0x1300Blur warningUnsigned Short1手ぶれ警告の状態を示します。0:No blur warning, 1:Blur warning を意味します。
0x1301Focus warningUnsigned short1オートフォーカスの状態を示します。0:Auto Focus good 1:Out of focusを意味します。
0x1302AE warningUnsigned short1自動露出の状態を示します。0:AE good, 1:Over exposure (>1/1000s,F11)を意味します。

Appendix 5: CanonのMakerNote

以下のデーターは David Burren さんによって解析されたものです。マスターデーターは  http://www.burren.cx/david/canon.html にあります。何か情報があったら David さんにメールしてください。
本データーは彼のRev.1.11(2001/01/30)のドキュメントによっています。

CanonのMakerNote情報はIFD形式を使っており、オフセット0から始まっています。ただし他メーカーと違い1つのタグが複数の機能の情報を含んでいるため注意が必要です。

いくつかのTAGは特定のデジカメ(例えばD30)でしか使われていませんが、TAGの番号や値の意味は(少なくとも今まで見た限り)PowerShotA50以降の全てのExifフォーマットを採用したCanon製デジカメで共通です。もしもそのTAGが無かったり、あるいはデーターがここに書かれている長さより短かったならば、それはすなわちそのTAGがそのデジカメでサポートされていないという事です。

Tag No. Tag Name Format CompoNo Value
0x0 不明 Unsigned Short 6 常に'0'のようです
0x1 不明 Unsigned Short 不定
Offset within tag Meaning
0 タグの総バイト数
1 マクロモード設定 1: マクロモード
2: 通常モード
2 '0'以外の場合は、セルフタイマーの時間の10倍の値が入っています
3 不明
4 フラッシュ設定 0: 非発光
1: 自動
2: 常時発光
3: 赤目防止
4: スローシンクロ
5: 自動+赤目防止
6: 常時発光+赤目防止
16: 外部フラッシュ使用(D30ではこの値はセットされません)
5 連写モード 0: 単写またはセルフタイマー(オフセット2を参照)
1: 連写モード
6 不明
7 フォーカスモード 0: ワンショット
1: AIサーボ
2: AIフォーカス
3: マニュアルフォーカス
4: シングルフォーカス(オフセット32を参照)
5: 連続フォーカス
6: マニュアルフォーカス
8, 9 不明
10 イメージサイズ 0: 大
1: 中
2: 小
11 イメージセレクトモード 0: フルオート
1: マニュアル
2: 風景
3: 高速シャッター
4: 低速シャッター
5: 夜景
6: 白黒
7: セピア
8: ポートレート
9: スポーツ
10: マクロ/クローズアップ
11: パンフォーカス
12 不明
13 コントラスト 0xffff: 低
0x0000: 通常
0x0001: 高
14 彩度 0xffff: 低
0x0000: 通常
0x0001: 高
15 シャープネス 0xffff: 低
0x0000: 通常
0x0001: 高
16 ISO感度 値が'0'の場合は、ExifタグにあるISOSpeedRatingsを使います。
15: 自動
16: 50
17: 100
18: 200
19: 400
17 測光方式 3: 評価測光
4: 中央部部分測光
5: 中央部重点平均測光
18 不明
19 AFポイント選択 0x3000: 無し(MF)
0x3001: 自動選択
0x3002: 右
0x3003: 中央
0x3004: 左
20 露出制御モード 0: イメージセレクト (オフセット11参照)
1: プログラム
2: シャッター優先
3: 絞り優先
4: マニュアル
5: 自動深度優先
21, 22 不明
23 レンズ最長焦点距離(単位はオフセット25参照)
24 レンズ最短焦点距離(単位はオフセット25参照)
25 オフセット23,24の単位(mm)
26 - 28 不明
29 フラッシュ詳細情報 Bits 15..0:
14: 外部E-TTL
13: 内蔵フラッシュ
11: FPシンクロ使用
4: FPシンクロ可
他ビットは不明
30 - 31 不明
32 フォーカス設定 注:G1の場合はこちらがオフセット7の値より優先されるようです
0: シングルAF
1: 連続AF
0x3 不明 Unsigned Short 4 不明
0x4 不明 Unsigned Short 不定
Offset within tag Meaning
0 タグの総バイト数
1 - 6 不明
7 ホワイトバランス 0: 自動
1: 太陽光
2: 曇
3: 白熱電球
4: 蛍光燈
5: フラッシュ
6: カスタム
8 不明
9 連続撮影モードの際の順列番号
10 - 13 不明
14 使用されたAF測距点 ワンショットAF時しか使われていない?
使われていない場合は、AF合焦失敗またはMF
Bits 15..0:
15-12: 使用可能な測距点数
2: 左
1: 中央
0: 右
15 フラッシュ発光強度補正 0xffc0: -2 EV
0xffcc: -1.67 EV
0xffd0: -1.50 EV
0xffd4: -1.33 EV
0xffe0: -1 EV
0xffec: -0.67 EV
0xfff0: -0.50 EV
0xfff4: -0.33 EV
0x0000: 0 EV
0x000c: 0.33 EV
0x0010: 0.50 EV
0x0014: 0.67 EV
0x0020: 1 EV
0x002c: 1.33 EV
0x0030: 1.50 EV
0x0034: 1.67 EV
0x0040: 2 EV
16 - 18 不明
19 被写体距離 単位が0.01mの場合と0.001mの場合があるようです(調査中)
どちらの場合も、ExifのSubjectDistanceタグにも値が設定されています
0x6 イメージの種類 Ascii string 32 例: "IMG:EOS D30 JPEG"
余った文字は空白(0x20)で埋められています
0x7 ファームウェアバージョン Ascii string 24 バージョン番号の後の区切り文字はヌル文字(0x00)で、その後は空白(0x20)で埋められています
0x8 イメージ通し番号 Unsigned Long 1 ファイル名等ではは'FFF-XXXX'の形式で使われています
'FFF'はこの値を1000で割ったもの、XXXXは1000で割った余りです
0x9 所有者名 Ascii string 32 所有者名の後はヌル文字(0x00)で区切られ、残りはスペース(0x20)で埋められています
0xa 不明 Unsigned Short 不定 不明
0xc カメラシリアル番号 Unsigned Long 1 上位16ビットはカメラ本体のラベルに4桁の16進数として
下位16ビットは5桁の10進数として印刷されています
0xd 不明 Unsigned Short 不定 不明
0xf カスタム機能 Unsigned Short 不定 最初の2バイト(short integer)はタグの総バイト数
それ以降の値は、上位8ビットはカスタムファンクション番号(下表のC.Fn)、下位8ビットはファンクションの値を示します

EOS D30のカスタムファンクション

C.Fn Name Value
1 長時間露光時のノイズ除去機能 0: オフ
1: オン
2 シャッター/AEロックボタンの機能 0: AF/AE ロック
1: AE ロック/AF
2: AF/AF ロック
3: AE+リリース/AE+AF
3 ミラーロックアップ 0: 不可
1: 可
4 シャッター・絞りの露出設定ステップ 0: 1/2 EVステップ
1: 1/3 EVステップ
5 AF補助光 0: オン(自動)
1: 強制オフ
6 絞り優先モード時のシャッター速度 0: オート
1: 1/200秒固定
7 AEブラケット順序と、撮影後のブラケットモード自動キャンセル機能 0: 0, -, + / 有効
1: 0, -, + / 無効
2: -, 0, + / 有効
3: -, 0, + / 無効
8 シャッター幕シンクロ 0: 前幕シンクロ
1: 後幕シンクロ
9 レンズAFストップボタンの機能 0: AFストップ
1: AF操作
2: AEロックとタイマー開始
10 自動フラッシュ充電量制限 0: オン
1: オフ
11 メニューボタン復帰位置 0: トップメニュー
1: 前メニュー(揮発性)
2: 前メニュー
12 撮影時のSETボタン機能 0: なし
1: ファイル保存品質変更
2: ISO設定変更
3: パラメータ選択
13 センサークリーニング 0: オフ
1: オン



更新履歴

rev. 1.4

rev. 1.3

rev. 1.2

rev. 1.1

rev. 1.0

謝辞

情報を提供してくださった以下の方に感謝いたします。

Daniel Switkinさん: TIFFヘッダーのTAG Markについて、ImageWidth/ImageLengthのデーター形式について
Peter Esherickさん: OlympusのMakerNoteについて
Matthias Wandelさん: FocalPlaneResolutionUnitのデーター形式について
Max Lyonsさん: NikonのMakernoteについて  彼のWebpage
Eckhard Henkelさん: CasioのMakernoteについて  彼のWebpage
David Burrenさん:FujifilmのFocalPlaneResolutionUnitの値が合わない件について / CanonのMakernoteについて  彼の webpage