HOME > bdf2bmp Time-stamp: "Feb 03 2002"

bdf2bmp

BDFフォントの字体一覧を作るソフト。

BDFフォントに含まれている字形を、BMP画像ファイルに出力します。
たとえば、courR18.bdf というBDFフォントから、このような画像ファイル

が得られます。
読みかたは、ビーディーエフ・トゥ・ビーエムピー。
courR18.bdf 等のBDFフォントファイルは、X.orgの ftpサーバからダウンロードすることができます。
日本語BDFフォントは、/efont/ の japanese-bdf-collection のページやリンクのページからたどれば入手できます。 あと、ftp://ftp.m17n.org/pub/mule/ には、intlfonts (international fontsの略) という多言語のもあり。

設計思想

このソフトは、文字コードに関係なく使えます。日本語BDFファイルも OK。

東雲(しののめ)フォントパッケージには、bdf2bit というツールが含まれています。 わたしのこの bdf2bmp というツールもそれと設計思想は同じです。

「BDFフォントファイルの中で、ビットマップデータの部分だけは変換して出力し、そのほかの部分には手をつけない」という考えで作ってあります。bdf2bit の場合は、ビットマップデータを 2値ビットマップふうの文字で出力するわけですが、bdf2bmpの場合は、別ファイルに BMP画像として出力する、というだけの違いです。


ダウンロード

Linux/Windows共用のソースと、Window用のバイナリがひとつのファイルに入っています。(ソースは ANSI Cで書かれているので、それ以外のプラットフォームでもコンパイルたぶん可)
http://www.vector.co.jp/soft/win95/writing/se174279.html

更新履歴
ver0.6 (2001/1/10) ベースラインも色分けして表示するようにした
ver0.5 (2000/12/30) 文字ごとの幅を色分けして表示できるようにした
ver0.1 (2000/12/17)


使いかた

具体例

説明

文字幅を表示した画像について

文字の幅を色であらわしたサンプルです。bdf2bmpに -wオプションを指定して生成しました。timI18.bdf (この画像は version 0.5 のものです。2倍拡大)
この図の示すところを、BDFファイルの中身と対照して説明します。

紫色の枠のなかに箱がならんでいます。この箱の幅・高さはどの文字も同じになっています。この数値は BDFファイル timI18.bdf の冒頭の FONTBOUNDINGBOX 21 22 -2 -5 という指定によって決まります。 箱の幅:21 高さ:22 となります。 timI18.bdf の「 f 」の文字で見てみましょう。
f

この箱の中は、まずグレイと白の部分を先に描写して、そのあとで 文字の白黒部分が描写するように、このソフトではなっています。 最初に、(1)を描写したあとで、上書きする形で、(2)を書き込みます。
font bounding box and glyph 'f'
(2)を書き込むとこうなります。 'f' are located

(1)の箱の グレイと白の意味を説明します。 フォントのバウンディングボックスの原点は、「FONTBOUNDINGBOX 21 22 -2 -5」で示されるオフセット (-2, -5) から計算されます。

オフセット offset という単語は、「ある点からどれだけ離れているか」「ある点からの距離」といった意味があります。
この原点より左側はグレイにしてあります。
origin point of font bounding box
一方、f の文字の「DWIDTH 5 0」という記述から、この文字の原点から次の文字原点までの距離が 5 ピクセルと分かります。次の文字の原点とその右側も、グレイにしてあります。DWIDTH のあとの 2つめの数字は、通常いつも 0 になります。

次に、(2)の文字について説明します。「BBX 9 17 -1 -4」と記述してあるので、このグリフ単独のバウンディングボックス(フォントのバウンディングボックスとは別ものです)の大きさは、幅: 9 高さ: 17 です。


STARTCHAR f
ENCODING 102
SWIDTH 278 0
DWIDTH 5 0
BBX 9 17 -1 -4
BITMAP
0700	-----###--------
0D80	----##-##-------
0C00	----##----------
1800	---##-----------
1800	---##-----------
7E00	-######---------
1800	---##-----------
1800	---##-----------
1800	---##-----------
1000	---#------------
3000	--##------------
3000	--##------------
3000	--##------------
2000	--#-------------
2000	--#-------------
E000	###-------------
C000	##--------------
ENDCHAR
(注: 16進数のあとの 「-」(2進数の 0)と「#」(2進数の 1)は筆者が勝手に付け加えたものです)

ビットマップデータ上は水平方向に16文字ぶんの 1 と 0 が並んでいますが、 グリフ単独の バウンディングボックスの幅は 9なので、このビットマップデータの左側 9文字ぶんの 1 と 0 だけが使われます。残りの右側 7文字は、バイト境界にあわせるだけのための詰めもの(パディング)です。
glyph bounding box and 'f'

このビットマップデータをどこに配置するかは、「BBX 9 17 -1 -4」から得られる、このグリフ単独のオフセット (-1, -4) で決まります。
f are located

bdf2bmp 0.5.xで -wオプションをつけたときのBMP画像によってわかることは、とりあえずこれで全部です。

文字幅を表示した画像について その2

version0.6で -wオプションの動作を少し変更しました。ベースラインより上か下かで、グレイを色分けするようにしました。サンプル timI18.bdf ( 微妙な色使いなんで見分けにくいかもしれません。ソースコードの 35行めくらいからを変更すれば、生成されるBMP画像の色を変えることができます )

色分けによる利点は、原点の位置がわかることです。このベースラインは何かというと、フォントのバウンディングボックスの y=0 の直線です。つまりこの直線は、各グリフごとの原点 (0,0) を通っています。

縦のグレイ境界線と横のグレイ境界線の交わるところが2つありますね。左側の交点が 現在のグリフの原点。右側のは、次のグリフの原点になります。 「e」の文字で見てみましょう。
e

ちなみに、「e」のデータはこうなってます。


STARTCHAR e
ENCODING 101
SWIDTH 444 0
DWIDTH 8 0
BBX 7 8 1 0
BITMAP
1C	---###--
66	-##--##-
46	-#---##-
CC	##--##--
F0	####----
C2	##----#-
E4	###--#--
78	-####---
ENDCHAR

なぜ原点の位置が重要なんでしょうか。

日本語のグリフの並べかたは、基本的に 矩形を隣あわせに並べていく、という手法でおこなわれています。たとえて言えば原稿用紙です。つまり、その矩形の箱1つ1つは重なりません。

それに対し、アルファベットのグリフは、ベースライン上に原点を置き、原点と原点との距離にしたがって、アルファベットを並べていく、というものです。かんたんにいえば、点とその距離にしたがって並べていくわけです。

ですから、アルファベットでも矩形の箱(バウンディングボックス)はありますが、それは重なることがありえます。 たとえば、「 f」の文字を見ると、
f
現在の文字「 f」の原点より左側の領域にはみだしてます。さらに、次の文字の原点より右側にも はみだしてます。

referという単語を考えてみましょう。e の「次のグリフの原点」が、f の原点と重なります。f の「次のグリフの原点」は、その隣の e の原点と重なるわけです。図にすると、
e,f,e
この線でつないだ2つの点は それぞれ重なるわけだから、
e,f,e are put side by side
こうなるはずです。 バウンディングボックス が重なってるのがわかるでしょうか。

いくらなんでもこれは接近しすぎじゃないか?と思われるかもしれませんが、このフォントは斜体 (Italic) なのでこんなにバウンディングボックスが重なっているんです。

Mozilla 0.9.7 + RedHatLinux7.2 で 簡単なHTML を書いて Times-Italic を表示してみました。
mozilla browser displays 'refer'
拡大すると、上の例と一致していることがわかります。
large size 'refer'

アルファベットを並べるには、各文字の「原点」と「次の原点までの距離」という2つのパラメータが使用されます。そのため、bdf2bmp version0.6では、その2つのパラメータを図示するようにしました。

timI18.bdf:
Copyright 1984-1989, 1994 Adobe Systems Incorporated.
Copyright 1988, 1994 Digital Equipment Corporation.


itouh