位圖字體分佈格式

位圖字體分佈格式Glyph Bitmap Distribution Format;縮寫作BDF)是一種存儲位圖字體的文件格式,由美國阿道比公司開發。它是一種人類和計算機都可讀的文本文件。位圖字體分佈格式通常使用在UNIX X WINDOW 環境。不過,現時BDF的地位已被PCF字體格式及向量字體格式OpentypeTruetype所取代。PCF檔其實是編譯好成二進位檔的BDF檔案,所以更具效率。

Overview 編輯

截至2018年 (2018-Missing required parameter 1=month!)當前的最新版本是2.2版。預計未來將沒有新版本被修訂。早期的版本被稱為字符位圖分佈格式(Character Bitmap Distribution Format)。

在1988年,X財團採用2.1版本的位圖字體分佈格式作爲X窗口系統的屏幕字體的標準格式,[1]但是X窗口系統已經基本遷移到了其他字體標準,例如PCFOpentypeTruetype

2.2版添加了對非西方文字的支持。例如,2.2版本的可以定義自上到下的字形而不是僅僅由左至右。

一個位圖字體分佈格式的字體包括三個部分:

  1. 一個適用於字體中全部字形的全局設定部分;
  2. 每個字形都有單獨設定的部分;和,
  3. 字體結束(ENDFONT)聲明。

範例 編輯

以下為一個範例字型檔,只包含一個字元的定義(見第10行),就是大寫A字。這個字的定義取自GNU Unifont

STARTFONT 2.1
FONT -gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1
SIZE 16 75 75
FONTBOUNDINGBOX 16 16 0 -2
STARTPROPERTIES 2
FONT_ASCENT 14
FONT_DESCENT 2
ENDPROPERTIES
CHARS 1
STARTCHAR U+0041
ENCODING 65
SWIDTH 500 0
DWIDTH 8 0
BBX 8 16 0 -2
BITMAP
00
00
00
00
18
24
24
42
42
7E
42
42
42
42
00
00
ENDCHAR
ENDFONT

在以上的範例,「全局設定」部分從"STARTFONT" 一行開始,至有"CHARS"的一行為止。

"STARTFONT 2.1"定義這個BDF檔案採用了2.1版本的格式。

"FONT -gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1" 這一行定義了字體的名稱。 字體族和顯示名稱是一個X邏輯字體描述

"SIZE 16 75 75" 定義這是一個16點字體,X軸和Y軸都是一吋75點。這是X窗口系統的規範。

"FONTBOUNDINGBOX 16 16 0 -2"定義了一個16*16的包圍框,左下角座標是(0,-2)。注意,儘管包圍框被定義爲了16*16的單元格,但是單個字形是可以重定義字形本身的。比如範例中的大寫拉丁字母「A」,它只有八像素寬。

"STARTPROPERTIES 2"聲明了兩個特殊屬性。"STARTPROPERTIES"在BDF標準中是可選的。X窗口系統允許特性FONT_ASCENT和FONT_DESCENT分別定義全部字形顯示基線的上下高度,"FONT_ASCENT 14"聲明在全部的16個像素中,有14個像素在基線以上。"FONT_DESCENT 2"反之聲明了有兩個像素在基線下。"ENDPROPERTIES"在"STARTPROPERTIES"部分之後出現。

"CHARS 1"聲明後面將跟隨一個字形。儘管阿道比公司現在管這個文件格式叫BDF字形,但是他們還是在關鍵字中保留了關鍵字"CHARS"。

在BDF文件的行開頭插入關鍵字"COMMENT"的話,這行裏關鍵字之後的任何字符都會被忽略。

以上的全局聲明是對每個字形都生效的。

"STARTCHAR U+0041"在2.1版及之前版本中指字符代碼的開始,而在2.2版本中指字形代碼的開始。這個單字符的字符串名稱是"U+0041",在Unicode標準中指十六進制代碼點41(十進制64,ASCII字符「A」)。在2.1版及之前版本中字符名稱字符串的長度被限制在14字以內。在2.2版本中,字形名稱最多能有65535字。

"ENCODING 65"聲明這個字體中這個字形的代碼點。

"SWIDTH 500 0"聲明X軸(缺省)和Y軸的可擴展長(寬)度是500。這將使X軸偏移到下個字形,但是下個字形的Y軸沒有偏移(既字形在一條直線上出現)。可擴展寬是 阿道比字體度量 (AFM)文件中,同一字符實際尺寸的一千倍。像素數據是以以下公式創建的

像素=(可擴展寬度÷1000)×(解像度÷72),

這個案例中scalable_width的參數是500,並且這個字體的解像度是75DPI,因為75約等於72,所以像素數量是字形(全局定義為16像素)全寬的500/1000倍,換句話說,就是說這個字形的寬度是8像素。

"DWIDTH 8 0"聲明字形的驅動寬度。在這種情況下,在字形被渲染之前,下個字形在當前基礎上X軸偏移8像素、Y軸偏移0像素。注意:設備寬度不一定等於字形寬度。它僅僅是X軸層面上的偏移,把圖元放置點放置到下個字形的開始位置。

可擴展寬度被用於計算打印機上的高解像度字形,然而,設備寬度是用於字形在顯示設備上的寬度的。這導致可擴展寬度的精確度更高。

"BBX 8 16 0 -2"聲明了一個8像素寬,16像素高的邊界盒。字符的左下角,X、Y軸分別偏移了一個和零個像素。

"BITMAP"開始當前字形的位圖。Y軸上必須是一個像素一分行。在這個範例字形中,字形是16像素高的,所以這裏有16行。每一行都是當前行像素分佈的十六進制表示。每一比特都將渲染一個像素。每一行都末尾都用二進制的零補全。在這個範例中,字形正好是八像素寬,所以每行正好佔據了八比特(一字節),以至於不需要補零。最重要的是奌陣是從最左邊的像素開始渲染的。

"ENDCHAR"是當前字形結束標誌。

字體裏的每個字形都需要"STARTCHAR"和"ENDCHAR"來聲明。

"ENDFONT" 出現在文件的最後一行,在字體中所有字形都被枚舉之後。

註釋 編輯

  1. ^ X Window System, Version 11, Release 3. X.Org Foundation. October 1988 [19 January 2016]. (原始內容存檔於2018-03-07). 

參考資料 編輯

外部連結 編輯