FreeType とは

FreeTypeは,David Turner 氏等によって開発されたフリーな TrueType font のラスタライズエンジン (ライブラリ) です. 元々は OS/2 のために Pascal 言語で開発されていたようですが, 現在は C 言語に移植されており多くのプラットフォームで利用可能です. hinting や anti-aliasing をサポートしているなど非常に完成度が高く, 本家の Mac OS や Win95 と比べても遜色のない美しい品質を実現しています. 日本語を含む 2 byte 系の Font も問題無く扱えるようです.

FreeType は長らく Public beta version の状態が続いていましたが, Jan. 29 1998 に待望の正式版 (FreeType 1.0) がリリースされ, 現在は FreeType 1.1 が公開中です. また,次期バージョン (FreeType 2.0) に向けての作業も進行中で, 最新の snapshot を freetype-current として入手することもできます.

FreeType のパッケージには configure スクリプトが用意されていますので, UNIX 系の OS ならば特に苦労することなくライブラリ (libttf.a) とサンプルプログラムを make できると思います. UNIX の他にも DOS, OS/2, amiga などに移植されているようです.


FreeType on VFlib

(VFlibに統合されたので実験終了)

FreeType を使って日本語のフォントを簡単に利用できるようにするため, VFlib (角川裕次氏によるベクトルフォントライブラリ) のための FreeType driver (VFlib の API を FreeType の API に変換する wrapper) を作ってみました. VFlib は現在 Version 3.x (the project TypeHack) が開発中ですが, 対応アプリの多いことを考慮して VFlib-2.22 用の font driver として実装しています.

VFlib-2.22 PL8のソースを展開した状態で

cd VFlib-2.22pl8/src
patch < somewhere/VFlib-2.22-Patch9
patch < somewhere/VFlib-2.22-Patch10
cd ..
zcat somewhere/VFlib-FT1.0-PL2.diff.gz | patch

のようにパッチを当てて make して下さい また,VFlib (+ FreeType) の共有ライブラリを作成する方法については, 塩崎拓也氏による 解説を参照して下さい. なお,VFlib-FT1.0.diff.gz は, このページにある共有ライブラリの作成をサポートするパッチ (VFlib-shlib-support.patch) を含んでいます.

FreeType driver を利用するためには, vfontcap の中でフォントタイプを ft=freetype と指定します. このとき,フォントファイルのパス (ff=) は拡張子 (.ttf/.ttc) も含めて指定してください (FreeType driver を利用する場合 .tti ファイルは必要ありません).

とりあえず,VFlib の API のうち利用頻度の多いと思われる

にのみ対応しています (GetOutline()は従来の TrueType driver とほぼ等価ですから品質向上のメリットはありません). 解釈可能なフォント属性も,今のところ ox, oy, fx, fy, ro, sl のみです. ox, oy はフォントのサイズ (EM) に対する百分率で指定するようになっています.

VFlib version 3.4.1 & VFlib version 2.23.1 がリリースされました.(June 25 1998)
VFlib version 2 系列の最新版となる ver.2.23.1 では, 上の FreeType パッチが統合され 標準で FreeType を利用できるようになりました. 一方 VFlib 3.4.1 には,より高機能な FreeType ドライバが実装されており, 日本語以外の TrueType font もサポートしています. VFlib version 3.4.1 & 2.23.1 はいずれも TypeHack packageに含まれています.

以下に VFlib で得られたビットマップの例を示します. 特に低解像度で文字の潰れがなくなり,かなり読みやすくなっていると思います.

[Win95 WordPad (16 dot)]
Win95 (WordPad) の表示画面 (12 point/96 dpi)

[VFlib:ft=freetype (16 dot)]
vftest -x 16 -y 16 -s 7 の出力 (ft=freetype)

[VFlib:ft=truetype (16 dot)]
vftest -x 16 -y 16 -s 7 の出力 (ft=truetype)

[Win95 WordPad (24 dot)]
Win95 (WordPad) の表示画面 (18 point/96 dpi)

[VFlib:ft=freetype (24 dot)]
vftest -x 24 -y 24 -s 7 の出力 (ft=freetype)

[VFlib:ft=truetype (24 dot)]
vftest -x 24 -y 24 -s 7 の出力 (ft=truetype)


Ghostscript 用 FreeType ドライバ (obsolete)

上の VFlib 用 wrapper のおかげで ビットマップデータを使う xdvi 等の文字品質は改善されましたが, アウトラインデータを利用する ghostscript には全く効果がありません. そこで,ghostscript から FreeType エンジンを呼び出すドライバを作ってみました.

当初は FreeType から hinting 後のアウトラインを取得する方法を考えていたのですが, ghostscript 側のラスタライズ処理と相性が悪いためか, 期待した程の効果は得られませんでした. そこで,gs2.61 の日本語パッチに付属していた pcf や jTeX ドライバを参考に, ビットマップデータでグリフを受渡しする方法を採用してみました. このとき, 出力デバイスの情報から常に適切なサイズ(=ラスタライズ時のサイズ) のビットマップデータを求めてやれば, 拡大縮小による歪みのないスケーラブルな文字データが得られるというわけです.

このパッチは Aladdin Ghostscript 5.10 + 田中哲氏による VFlib サポートパッチ 1.1 (or 1.2) + 片山紀生氏による Ghostscript 5.10 with VFlib 1.1 用日本語 PDF パッチ に対する差分になっています. 日本語 PDF パッチを使わない場合は, 必要に応じて kanji/kconfig を手で修正して下さい. また make の際は, 使用する makefile の kanji.dev kfvflib.dev のエントリを kfVFlibBM.mak の内容に置き換えて下さい.

使い方は,従来の kfvflib ドライバとほとんど同じですが, kanji/kconfig の中の VFlibkanji を VFlibBMkanji に書き換えることで, outlinekanji の代わりに bitmapkanji が使用されるようになります. 従来の VFlibkanji を指定することも可能です. VFlib に FreeType on VFlib が組み込まれている場合は, 一般に VFlibBMkanji を使った方が綺麗に表示されると思います.

田中哲氏による VFlib サポートパッチ 1.4 がリリースされました. このパッチでは xfont (external font) interface を利用して, VFlib から取得したグリフを直接描画する方式が採用されています. VFlibBM と比較して処理速度等の面で優れており,要注目です!!

[kfftype.dev (article9.ps, 72dpi)]
FreeType を利用した場合の表示例 (article9.ps, 72dpi)

[kfVFlib.dev (article9.ps, 72dpi)]
従来の kfvflib による表示例 (article9.ps, 72dpi)


関連リンク

VFlib 対応ソフトウェア


matsuda (a) ee.noda.tus.ac.jp