|
●はじめに ディジタル・カメラで撮影した写真の撮影情報は、世の中のフリーソフトやメーカ提供ソフトなどで簡単に表示できるので、EXIF形式を知る必要は全くない。しかし、画像ファイルから直接撮影情報を読み取れれば、データベース化が自動化できることになる。この時、EXIFファイルの形式を知る必要がある。 EXIF規格などの解説は沢山出ているので、ここでは、大まかなレベルにとどめる。 ●背景 JEIDA(日本電子工業振興協会)がEXIF2.1仕様書としてまとめている。現在は、2.2になっている。ISOで、DCF仕様が策定され、メーカはこれを採用しつつある。DCFはEXIFに準拠し、ファイルシステムまで包含した規格である。 ●EXIFとは? 画像自体はJPEG画像形式で、その中にサムネール画像や撮影情報などのデーターを規約に準拠した形で埋め込んだものとなっている。従って、従来のJPEG画像(JFIF形式)を表示するソフトであればEXIFファイルも問題なく表示できる。 ●ファイルの全体構造 ファイルはメタデータが集まったバイナリファイルとなっている。必ず、hFFD8で始まり、hFFD9で終わる。(hXXXXはHexa表現) hFFD8:SOI(Start Of Image) で、これらはマーカと呼ばれている。マーカは一般には、 hFFXX の形式で、hFFXX SSSS DDD・・・・・DDDD と言う形を取る。SOI、EOIは特別で、SやDを持たない。 SSSS:UInt16で表されたデータサイズ(バイト数)、SSSSの2バイトを含む また、hFFE0〜hFFEFをアプリケーション・マーカと呼び、画像のデコードには無関係なマーカで、 hFFE0:JFIF形式で使われるマーカ、APP0マーカと呼ばれる となっている。APP1がEXIFの画像以外の付帯情報(サムネール、撮影情報など)群となる。hFFDAは画像本体の開始を示すSOS(Start Of Stream)と呼ばれるマーカが続く。欲しい情報は、APP1にある。 APP1マーカ以降、SOSの直前までが欲しい情報がある部分である。ここには、APP1全体のバイト数(最大で64K)、EXIFヘッダ、Tiffヘッダと続き、情報本体であるIFD(Image file directory)領域となる。 APP1領域内で情報を格納している部分で、複数のIFDからなる。IFDの構造は規格で定義されている。標準IFDの他、メーカ独自の情報を格納するMakerNote IFDがある。但し、MakerNoteはIFD形式であるとは限らない。 EXIFファイルのダンプリストを元に解説する。 ●EXIFファイルを読む 標準IFDとMakerNoteを自分のプログラムで読み、撮影情報などを得る方法は、この頁を参照する。 |