| インデックス |
Java |
|
昨今のデジカメのスペックを見ると出てくるのが「ファイルフォーマットはDCF」といった記述です。一昔前なら「Exifフォーマット」という名前がよく出てきていました。
一体これらの画像フォーマットはどんなものなのでしょうか。
まずよくあるのがDCFがファイルのフォーマットを表しているという誤解です。DCFは"Design rule for Camera File System"の略で「ファイルシステムの規格」なのです。DCFで規定されるのは以下のような内容です。
つまりデジカメのメディアにファイルを書き込む場合の構成とそれを書き込む機器、再生する機器の規定がDCFであり、実際に置かれる画像ファイルのフォーマットはExifが用いられているのです。
つまりExifファイルフォーマットが無くなって代わりにDCFが出てきたのではなく、ファイルフォーマットはExifでファイルシステムはDCFであるというのが正しい認識なのです。
デジカメのファイルフォーマットを調べたかった私はこの誤解のためにDCFの規格を取り寄せてしまい、大失敗しました。こういった定義の問題は、雑誌の記事やデジカメの説明書にさえ載っていません。初心者向けに分かりやすいマニュアルや記事を書くことは必要ですが、誤解を生むような内容では意味がないのでは無いでしょうか。
Exif規格は純粋にデジカメ用の画像ファイルフォーマットの規格です。そこでまた誤解が生じやすいのは、「Exif対応のソフトがないと見られないのか」という事です。
結論を言うとそんなことはありません。Exifファイルは一般的なJPEGファイルフォーマット、もしくはTIFFファイルフォーマットに準拠しています、そしてそれらの規格の範囲内で撮影条件などの独自の情報を埋め込んでいるのです。だから画像を見たいだけならExif対応のソフトを買ったりする必要はありません。
もちろんExif対応のソフトがあれば良いこともあります。
JPEGファイルフォーマットには「アプリケーションマーカセグメント」という領域が定義されていて、アプリケーション固有の情報を格納できるようになっています。Exifファイルフォーマットはその領域にExif独自の情報を格納しているので、それを読みだして再び書き込む機能がアプリケーションにあればそれを失うことは無くなります。
逆にExif非対応のソフトでExifファイルをレタッチしてしまうとそれは大体の場合"JFIF"という別のフォーマットで記録されてしまい、アプリケーション情報には"PhotoShop ver 5.0"とか書かれてしまう訳です。
余談ですがExif対応のデジカメを販売しているメーカーからデジカメ画像のサンプルをダウンロードして見てみると、臆面もなくJFIF画像で中に"PhotoShop"とか書いてあるなどという場合があります。全く「馬鹿にすんなよ」といった感じです。
レタッチを一切加えないサンプルを置くのが当然としても、レタッチをした場合、例えそれが縦横の方向を変えただけだったとしても、メーカの信頼を損なわないために注意書きを添えておくべきではないでしょうか。
しかもこれからはExif対応の書き込みソフトが出てくるでしょうから、サンプル画像は個人のページなどの利害の絡まない筋からのものしか信頼できなくなってしまうでしょう。
それではExifファイルフォーマットの概要を説明していきます。ここでは圧縮形式のExifファイルフォーマットを説明します。Exifのバージョンは2.1にもとづいています。
まずJPEGフォーマットに関する部分は以下のようになっています。
| ポイント(16進) | サイズ(byte) | 値(16進) | 意味 |
| 0000 | 2 | FFD8 | JPEG SOI |
| 0002 | 2 | FFE1 | APP1マーカ |
| 0004 | 2 | ? | APP1サイズ |
| 0006 | 6 | "Exif"00 | Exif識別コード |
APP1は「アプリケーションマーカセグメント1」の意味でExifフォーマットではJPEGのこの部分に情報を格納します。
ここから先はExifデータが格納されていますが、それはTIFF画像のタグ形式になっています。
| ポイント(16進) | サイズ(byte) | 値(16進) | 意味 |
| 0000 | 2 | "MM"(4D4D) or "II"(4949) |
TIFFヘッダ "MM": Big Endian "II": Little Endian |
| 0002 | 2 | 002A | TIFF識別コード |
| 0004 | 4 | 00000008 | 0th IFDへのポインタ |
| 0008 | 0th IFDの始まり |
TIFFヘッダによってここから先のエンディアンが決まります。エンディアンについてはここでは説明しません。
IFDというのはTIFFのタグのセットの事でこの直後から0th IFD(0番目のIFD)が始まる場合には0th IFDへのポインタの値は00000008.Hとなります。
0th IFDの構造は以下のようになります。
| ポイント(16進) | サイズ(byte) | 値(16進) | 意味 |
| 0008 | 2 | n | タグの数 |
| 000A | 12 x n | ? | タグ領域 |
| 000A+12*n | 2 | ? | 次のIFDへのポインタ |
| 000A+12*n+2 | ? | ? | タグの値の領域 |
一つ一つのタグは12バイトの大きさで、以下のような形式になります。
| ポイント(16進) | サイズ(byte) | 意味 |
| 0000 | 2 | タグ |
| 0002 | 2 | 値のタイプ |
| 0004 | 4 | 値の数 |
| 0008 | 4 | 値もしくは値へのオフセット |
タグの値は4バイト以内ならばタグの中に、4バイトより大きい場合は値のある場所へのオフセットを記述します。
全てのポインタやオフセットはTIFFヘッダからのオフセットです。
0th IFDの最後にある次のIFDへのポインタは1st IFDを指しています。1st IFDもTIFFのタグの集合になっていて、こちらはサムネイル画像の属性が格納されています。
タグに格納されている値のタイプは以下のものが用いられています。
| タイプ | 名前 | サイズ(byte) | 内容 |
| 1 | BYTE | 1 | 8ビット符合なし整数 |
| 2 | ASCII | ? | ASCII文字の集合'0.H'で終端 |
| 3 | SHORT | 2 | 16ビット符合なし整数 |
| 4 | LONG | 4 | 32ビット符合なし整数 |
| 5 | RATIONAL | 8 | LONG2つ、分子/分母 |
| 7 | UNDEFINED | ? | 未定義のバイト列 |
| 9 | SLONG | 4 | 32ビット符合あり整数 |
| 10 | SRATIONAL | 8 | SLONG2つ、分子/分母 |
0th, 1st IFDで用いられるタグには以下のような種類があります。これはTIFF Rev6.0 の必須タグの中でExifで用いるものと、Exif固有のタグを含んでいます。
| タグ | タグ名 | 意味 |
| 256 | ImageWidth | 画像の幅(ピクセル) |
| 257 | ImageLength | 画像の高さ(ピクセル) |
| 258 | BitsPerSample | 画素のビットの深さ(ビット) |
| 259 | Compression | 圧縮の種類 |
| 262 | PhotometricInterpretation | 画素構成の種類 |
| 274 | Orientation | 画素の並び |
| 277 | SamplesPerPixel | ピクセル毎のコンポーネント数 |
| 284 | PlanarConfiguration | 画素データの並び |
| 530 | YCbCrSubSampling | 画素の比率構成 |
| 531 | YCbCrPositioning | 画素の位置構成 |
| 282 | XResolution | 画像の幅方向の解像度(ピクセル) |
| 283 | YResolution | 画像の高さ方向の解像度(ピクセル) |
| 296 | ResolutionUnit | 解像度の単位 |
| 273 | StripOffsets | イメージデータへのオフセット |
| 278 | RowsPerStrip | 1ストリップあたりの行数 |
| 279 | StripByteCounts | 各ストリップのサイズ(バイト) |
| 513 | JPEGInterchangeFormat | JPEGサムネイルのSOIへのオフセット |
| 514 | JPEGInterchangeFormatLength | JPEGサムネイルデータのサイズ(バイト) |
| 301 | TransferFunction | 諧調カーブ特性 |
| 318 | WhitePoint | ホワイトポイントの色座標値 |
| 319 | PrimaryChromaticities | 原色の色座標値 |
| 529 | YCbCrCoefficients | 色変換マトリックス係数 |
| 532 | ReferenceBlackWhite | 黒色と白色の値 |
| 306 | DateTime | ファイル変更日時 |
| 270 | ImageDescription | 画像タイトル |
| 271 | Make | メーカ |
| 272 | Model | モデル |
| 305 | Software | 使用したソフトウェア |
| 315 | Artist | 撮影者名 |
| 3432 | Copyright | 著作権表示 |
| 34665 | ExifIFDPointer | Exif IFDへのポインタ |
| 34853 | GPSInfoIFDPointer | GPS情報IFDへのポインタ |
この中のExifIFDPointerが示す位置にExif固有のタグを含んだExif IFDがあります。Exif IFDで用いられるタグには以下のような種類があります。
| タグ | タグ名 | 意味 |
| 36864 | ExifVersion | Exifバージョン |
| 40960 | FlashPixVersion | 対応FlashPixのバージョン |
| 40961 | ColorSpace | 色空間情報 |
| 37121 | ComponentsConfiguration | コンポーネントの意味 |
| 37122 | CompressedBitsPerPixel | 画像圧縮モード(ビット/ピクセル) |
| 40962 | PixelXDimension | 有効な画像の幅(ピクセル) |
| 40963 | PixelYDimension | 有効な画像の高さ(ピクセル) |
| 37500 | MakerNote | メーカ固有情報 |
| 37510 | UserComment | ユーザコメント |
| 40964 | RelatedSoundFile | 関連音声ファイル名 |
| 36867 | DateTimeOriginal | オリジナル画像の生成日時 |
| 36868 | DateTimeDigitized | ディジタルデータの生成日時 |
| 37520 | SubSecTime | ファイル変更日時の秒以下の値 |
| 37521 | SubSecTimeOriginal | 画像生成日時の秒以下の値 |
| 37522 | SubSecTimeDigitized | ディジタルデータ生成日時の秒以下の値 |
| 33434 | ExposureTime | 露出時間(秒) |
| 33437 | FNumber | F値 |
| 34850 | ExposureProgram | 露出プログラム |
| 34852 | SpectralSensitivity | スペクトル感度 |
| 34855 | ISOSpeedRatings | ISOスピードレート |
| 34856 | OECF | 光電変換関数 |
| 37377 | ShutterSpeedValue | シャッタースピード(APEX) |
| 37378 | ApertureValue | 絞り(APEX) |
| 37379 | BrightnessValue | 輝度(APEX) |
| 37380 | ExposureBiasValue | 露出補正(APEX) |
| 37381 | MaxApertureValue | レンズの最小F値(APEX) |
| 37382 | SubjectDistance | 被写体距離(m) |
| 37383 | MeteringMode | 測光方式 |
| 37384 | LightSource | 光源 |
| 37385 | Flash | フラッシュ |
| 37386 | FocalLength | レンズの焦点距離(mm) |
| 41483 | FlashEnergy | フラッシュのエネルギー(BCPS) |
| 41484 | SpatialFrequencyResponse | 空間周波数応答 |
| 41486 | FocalPlaneXResolution | 焦点面の幅方向の解像度(ピクセル) |
| 41487 | FocalPlaneYResolution | 焦点面の高さ方向の解像度(ピクセル) |
| 41488 | FocalPlaneResolutionUnit | 焦点面の解像度の単位 |
| 41492 | SubjectLocation | 被写体位置 |
| 41493 | ExposureIndex | 露出インデックス |
| 41495 | SensingMethod | 画像センサの方式 |
| 41728 | FileSource | 画像入力機器の種類 |
| 41729 | SceneType | シーンタイプ |
| 41730 | CFAPattern | CFAパターン |
| 40965 | InteroperabilityIFDPointer | 互換性IFDへのポインタ |
GPSInfoIFDPointerで示された位置にGPS Info IFDがあり、GPSの測定情報を格納できます。ここで用いられるタグには以下のような種類があります。
| タグ | タグ名 | 意味 |
| 0 | GPSVersionID | GPSタグのバージョン |
| 1 | GPSLatitudeRef | 緯度の南北 |
| 2 | GPSLatitude | 緯度(度、分、秒) |
| 3 | GPSLongitudeRef | 経度の東西 |
| 4 | GPSLongitude | 経度(度、分、秒) |
| 5 | GPSAltitudeRef | 高度の基準 |
| 6 | GPSAltitude | 高度(m) |
| 7 | GPSTimeStamp | GPSの時間(原子時計) |
| 8 | GPSSatellites | 測位に使用したGPS衛星 |
| 9 | GPSStatus | GPS受信機の状態 |
| 10 | GPSMeasureMode | GPSの測位モード |
| 11 | GPSDOP | 測位の信頼性 |
| 12 | GPSSpeedRef | 速度の単位 |
| 13 | GPSSpeed | 速度 |
| 14 | GPSTrackRef | 進行方向の基準 |
| 15 | GPSTrack | 進行方向(度) |
| 16 | GPSImgDirectionRef | 撮影方向の基準 |
| 17 | GPSImgDirection | 撮影方向(度) |
| 18 | GPSMapDatum | 測位に用いた地図データ |
| 19 | GPSDestLatitudeRef | 目的地の緯度の南北 |
| 20 | GPSDestLatitude | 目的地の緯度(度、分、秒) |
| 21 | GPSDestLongitudeRef | 目的地の経度の東西 |
| 22 | GPSDestLongitude | 目的地の経度(度、分、秒) |
| 23 | GPSBearingRef | 目的地の方角の基準 |
| 24 | GPSBearing | 目的地の方角(度) |
| 25 | GPSDestDistanceRef | 目的地への距離の単位 |
| 26 | GPSDestDistance | 目的地への距離 |
これらのタグ名はAlbumMakerのExif属性フォーマットを記述する場合に使うことができます。
またAlbumMakerのソースを読む場合にこれらの情報を役立てて下さい。
AlbumMakerのパッケージに付いてくるクラスでExifファイルのタグ属性を表示することができます。圧縮ファイルを解凍したディレクトリで、
java Exif.ExifProperty <file name>
とコマンドプロンプトから実行すると、タグ属性が表示されます。ウインドウ表示にしたい場合は"W"オプションをつけます。
java Exif.ExifProperty -W <file name>
このページについてのご質問はこちらへどうぞ。
このページに用いられている3Dのロゴやボタンは全てGLlogoによってレンダリングされたものです。
このページはリンクフリーです。
著作権等についてはこちらをどうぞ。