« ScriptGetPropertiesの続き | トップページ | OpenTypeフォントの続き(1)・・・TTC »

2008年2月 5日 (火)

OpenTypeフォント

今回からOpenTypeフォント

OpenTypeフォントはTrueType Open V2.0フォントとも呼ばれ、Microsoft社とAdobe社によってTrueTypeフォントを拡張して開発されたフォントである。また、グリフデータとして、TrueType形式のグリフデータもしくはPostScript形式のグリフデータを含むことができるアウトラインフォントであるが、小さいフォントサイズ用にビットマップ形式のグリフデータを含むこともできる。

で、今回から、このOpenTypeフォントのファイルを解析してみる。ちなみに、TrueType形式のグリフデータを含むOpenTypeフォントのファイルの拡張子は通常.TTF.OTFである。

OpenTypeフォントの構造は、フォントに関する様々な情報が格納された名前(タグと呼ばれる)付きのテーブルの集まりから構成され、下の図のようになる。

Opentype1_1

OpenTypeフォントは、最初にバージョン番号やフォント内のテーブル数が格納されたオフセットテーブル(Offset Table)から始まる(オフセット=0)。そしてすぐ後に、フォント内の各テーブルのタグ名や開始位置(オフセット)やサイズが格納されたテーブルディレクトリ(Table Directory)が続く。ちなみに、上の図は概念的な図である。

オフセットテーブルの構造は次のようになる。

オフセットテーブル
名前 説明
Fixed sfnt version 0x00010000 for version 1.0
USHORT numTables テーブル数
USHORT searchRange
USHORT entrySelector
USHORT rangeShift

numTablesはフォント内のテーブル数である。テーブルオフセットのすぐ後に続くテーブルディレクトリはテーブルディレクトリエントリの配列で、numTable個のエントリが含まれる。テーブルディレクトリエントリの構造は次のようになる。

テーブルディレクトリエントリ
名前 説明
ULONG tag 4バイト識別子(タグ名)
ULONG checkSum テーブルのチェックサム
ULONG offset テーブルのファイルの先頭からのオフセット(バイト)
ULONG length テーブルのサイズ(バイト)

tagはテーブルに付けれたタグの名前で、印字可能なASCII文字でなければならない。offsetはテーブルのファイルの先頭からのオフセット、lengthはテーブルのサイズを表す。つまり、offsetとlengthを使ってフォント内の各テーブルにアクセスする。

以上のことを踏まえて、OpenTypeフォント内に含まれているテーブルを列挙するプログラムを作成してみた。

Opentype1_2

上はWindows2000に含まれているTahomaフォントのファイル(ファイル名TAHOMA.TTF)を解析した時の実行結果である。Tahomaフォントのファイルには、21個のテーブルが含まれ、例えば、cmapやnameというタグ名の付いたテーブルが含まれていることが分かる。また、各テーブルのファイルの先頭からのオフセットやサイズも分かる。ちなみに、OpenTypeフォントファイルのバイトオーダーはモトローラ形式のビッグエンディアンなので、Intel系のCPUを使うWindows上で読み書きする時には、バイトオーダーをリトルエンディアンに変換する必要がある。

また、Tahomaフォントは欧文用のフォントで、本来は日本語環境のユーザーに馴染み深いMSゴシックなどのフォントの実行結果を載せたいところであるが、MS ゴシックやMS明朝などのフォントはTrueType Collectionというファイルフォーマットになっているので、今回は割愛した。

ということで次回に続く?。

« ScriptGetPropertiesの続き | トップページ | OpenTypeフォントの続き(1)・・・TTC »

フォント」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1497665/39651802

この記事へのトラックバック一覧です: OpenTypeフォント:

« ScriptGetPropertiesの続き | トップページ | OpenTypeフォントの続き(1)・・・TTC »

自作ソフトウェア

無料ブログはココログ

メモ