メーカーノートとは? |
メーカーノートとは大まかに以下のようなものです。
・機器メーカー毎の独自情報格納を目的としたEXIF仕様。
・格納位置はEXIF IFDに記録されタグは”0x927C”。
・データタイプはUNDEFINEDであり、データ構造やサイズについては規定がない。
※『F6 Exif』の解析できるメーカーノートは(株)ニコン製のデジカメ/ソフトで書き出されたメーカーノートのみです。 |
メーカーノートはやっかいもの |
”メーカーノート”はEXIF編集ソフトを開発する上で結構やっかいなデータです。
データの性質上、多種多様なフォーマットが存在し、且つその仕様は公開されていません。
つまり、EXIF編集によりどのような影響を受けるか分からないのです。
メーカーノートのデータ管理にTIFFHEADERからのオフセット情報を使用するタイプのメーカーノートが多く存在します。
この場合、EXIF編集操作でメーカーノートのアドレスが変わってしまうとデータが正常に読み取れなくなります。つまり結果的にメーカーノート・データが破壊されます。
また、内部データのエンディアン形式がTIFFヘッダのエンディアンに従い記録される場合も多く、EXIF編集ソフトがエンディアンを変更するとメーカーノートが結果的に破壊されます。
上記の問題を回避する為の手段は以下の2通りです。
@.EXIF編集が行われるたびに、メーカーノート・データの整合性を保つようにデータを訂正する。
A.EXIF編集の際にエンディアンを変更しない、且つメーカーノートのアドレスを変更しない。
@の手段は、全てのメーカーノートの構造や仕様を理解しなければ成りません。つまりは、現実的には不可能です。
Aの手段は、メーカーノートの構造を知る必要がない為、現実的な手段です。
但し、0th IFDに大きなデータが追加されてしまった場合にはアドレスを固定出来ず、データ破壊が発生します。また、その他の要因でデータが破壊されるかもしれません。
つまり、完全な回避手段ではありません。
『F6 Exif』ではAの手段で対応しています。
EXIFデータを書き出す際に、元のエンディアンに従って出力します。また、メーカーノートのアドレスを変更しないように、EXIF
IFD内の値の順番を入れ替えることで対応しています。(EXIF仕様は値の記録位置を規定しない為、エントリの値はエントリと同じ順序で記録する必要はありません)
0th IFDへのデータ追加によりアドレスを固定出来ない場合、『F6 Exif』では警告メッセージを表示しています。
こんなやっかいものなので、EXIFに対応するレタッチソフトなどでもメーカーノートだけは、削除、もしくは自分の情報で上書きしてしまうのでしょうね。 |
ニコン・メーカーノート構造と困った問題 |
基本的にニコンのメーカーノートはTIFFヘッダーとIFDにより構成されます。
IFDやタグの構造はEXIF仕様のものと同様です。
各タグで使用するエンディアンやオフセット値はメーカーノートの先頭にあるTIFF
HEADERを基準にする為、EXIFデータのTIFF HEADERに影響を受けません。
また、EXIFのサムネイルとは別に独自のサムネイルを持ちます。画像サイズはEXIFのそれより大きめで機種によりサイズはまちまちです。
※念の為断っておきますが、これは私の解析結果に基づく為、大いに間違っている可能性があります。(^^; |
データ構造
独自 HEADER(10バイト) |
TIFF HEADER(8バイト) |
撮影情報格納用 IFD |
サムネイルデータ用 IFD |
スキャン情報格納用 IFD |
サムネイル画像データ(JPEG) |
|
<<独自 HEADER>>
以下のいずれかの値が格納されている。
@NikonCaptureなどのソフトや、COOLPIX系のリトルエンディアン形式で記録する場合
0x4E
'N' |
0x69
'i' |
0x6B
'k' |
0x6F
'o' |
0x6E
'n' |
0x00 |
0x02 |
0x00 |
0x00 |
0x00 |
ADXXXの一眼レフデジカメなどのビッグエンディアン形式で記録する場合に使用する
0x4E
'N' |
0x69
'i' |
0x6B
'k' |
0x6F
'o' |
0x6E
'n' |
0x00 |
0x02 |
0x10 |
0x00 |
0x00 |
|
<<TIFF HEADER>>
EXIF仕様で使われるものと同じです。
ニコンのメーカーノートのエンディアンや、オフセットはこれを基準にします。
|
<<撮影情報格納用IFD>>
デジカメで撮影した情報や、基本構造の情報はここに収められます。
記録されるデータ量は多く、未だ全てを解析できていません。
また、サムネイルデータ用IFD、スキャン情報格納用IFDのアドレスはこのIFDのタグとして記録されます。 |
<<サムネイルデータ用IFD>>
EXIF仕様の1st IFD(thumbnail IFD)と同様の内容です。
サムネイルデータのアドレスやサイズを記録します。 |
<<スキャン情報格納用IFD>>
Nikon Scanなどで作成された画像に含まれ、スキャンした時の各種パラメータが保存されています。 |
<<サムネイル画像データ>>
JPEG形式のサムネイルです。EXIF仕様のサムネイル(160*120)より大きいサムネイルが保存されます。
Nikon Viewなどのサムネイル一覧ではこの画像が使われます。
|
|
|
ここで、困った問題があります。
通常、EXIF IFDに記録されるメーカーノートタグのサイズ(カウント)は上図の独自HEADER〜サムネイル画像データまでの全てを含みます。デジカメ撮影後は少なくともそうなっています。
これが、Nikon Captureで保存するとそのサイズは独自HEADER〜撮影情報用格納IFD迄と成ってしまいます。つまり、メーカーノートのカウントを信じてそのサイズだけ読み込み、保存などするとデータが欠損してしまうわけです。
メーカーノートの仕様は公開されていない為、不具合なのか正常な動作なのか分かりません。
『F6 Exif』では対応策として、必ずこのデータ構造に成っていると仮定してデータを読み込みます(タグのサイズは無視します)。これにより上記の状態でも欠損は発生しません。 |