2010年5月27日木曜日

TIFF : Tagged Image File Format

TIFF Revision 6.0 は 1992年6月に公開されました。仕様書は3つのパートからなり構成は以下のようになっています。
  • Part 1 : Baseline TIFF
  • Part 2 : TIFF Extexsions
  • Part 3 : Appendices
なかでも Baseline TIFF は

Baseline TIFF is the core of TIFF, the essentials that all mainstream TIFF developers should support in their products.

と TIFF を扱うソフトウェアで最低限の仕様を定めています。ここではTIFF のコアである Baseline TIFF を中心に、定義されている内容についてみていきたいと思います。



TIFF Structure

TIFF は1次元(イメージ自体は二次元)でデータを表現しています。オフセットは 1byte を単位として0からN番目まで最大2の32乗の長さをもつことができます。つまりひとつのファイルサイズは最大で 4GB になります。

ファイルはイメージ・ファイル・ヘッダと呼ばれる、8バイトのファイルの構造自体を記述したヘッダから始まります。このヘッダにはイメージ・ファイル・ ディレクトリ(Image File Directory : IFD)という実際の画像がどう再現されるべきかの情報を含んだ領域へのポインタが含まれています。

TIFF Revision 6.0 Section 2 Figure 1 より転載

Image File Header

Bytes 0-1ファイルで使用されているバイト・オーダです。”II”(4949)はリトル・エンディアンで”MM”(4D4D)はビッグ・エンディアン。これ以降ファイルのバイト・オーダはここの値によります。
Bytes 2-3TIFF ファイル識別のための数字 ”42”。仕様書には ”任意だが慎重に選ばれた数字” となっています。このことでしょうか?
Bytes 4-7最初の IFD へのオフセット。IFD はヘッダの後ならどこにあってもかまいませんが、ワード(16 ビットごと?)の境界から始まらなければなりませんとあります。ちなみに Photoshop で作成した TIFF の IFD はヘッダの直後に、Mac のプレビューではファイルの後方に IFD をおいています。


Image File Directory

IFD は ”IFD エントリ” と呼ばれるタグとタグについて情報を格納する場所です。最初の2バイトは IFD エントリの数になります。2バイトでなので、最大エントリ数は65535個です。

IFD エントリはひとつの IFD エントリは12バイトで構成されています。最後にもしあれば次の IFD へのオフセットが4バイトで格納されています。なければこの値は4バイト分すべて0になっていなければなりません。

TIFF の IFD と IFD エントリに関して、次のように

There must be at least 1 IFD in a TIFF file and each IFD must have at least one entry.

となっています。

それぞれの IFD エントリのデータフィールドは次のようになっています。
Bytes 0-1このエントリを識別するタグです。
Bytes 2-3このエントリの値がどんなデータ型で表現されているかを示しています。
1から12までの数値でそれぞれのデータ型を定めてあります。
Bytes 4-7カウント。このエントリがもっているデータの数です。
Bytes 8-11エントリの値または値のオフセット。データ型の長さとカウントをかけ合わせた数値バイトがこのフィールドに収まる(4バイト以下で表現できる)ならば、その値が格納さています。そうでない場合はここにはオフセットが格納されています。実際のデータはオフセットが示す位置から、データ型とカウントをかけ合わせた数値バイト分だけ格納されています。
IFD に含まれるエントリはタグが昇順で並ぶように格納されていなければなりませんが、オフセットはファイルのどこを示してもよいです。つまり4バイトで収まらない値はファイルのどこにおいてもいいということです。

データ型は次のように定められています。
1BYTE1バイト符号なし整数
2ASCII1バイトの ASCII 文字。
3SHORT2バイト符号なし整数
4LONG4バイト符号なし整数
5RATIONAL2つの LONG 型で表現される8バイト分数。最初の4バイトが分子を表し、次の4バイトが分母を表しています。
6SBYTE1バイト符号付き整数
7UNDEFINEDただ単に1バイトのデータ
8 SSHORT2バイト符号付き整数
9SLONG4バイト符号付き整数
10SRATIONAL2つの SLONG 型で表現される8バイト分数。最初の4バイトが分子を表し、次の4バイトが分母を表しています。
11FLOATIEEE 方式の 4バイト単精度浮動小数点
12DOUBLEIEEE 方式の 8バイト倍精度浮動小数点


Multiple Image per TIFF File

TIFF はそれぞれの IFD でサブファイルを持つことができるので、ひとつのファイルで関連するイメージをいくつも持つことができますが Baseline TIFF で規定されたリーダでは IFD を1つだけ読み込めばよいとしています。



Baseline Field Reference Guide

ここからは Baseline TIFF で使用する36個のすべてのエントリ・フィールドの定義についてみていきます。ファイルのなかにここにあるエントリ・フィールドが存在しない場合は

If the field does not exist, readers must assume the default value for the field.

デフォルト値を仮定しているとすること、とあります。


-------途中。順次改訂します---------

0 件のコメント:

コメントを投稿