位图字体分布格式
此条目目前正依照其他维基百科上的内容进行翻译。 (2018年3月7日) |
位图字体分布格式(Glyph Bitmap Distribution Format;缩写作BDF)是一种存储位图字体的文件格式,由美国阿道比公司开发。它是一种人类和计算机都可读的文本文件。位图字体分布格式通常使用在UNIX X WINDOW 环境。不过,现时BDF的地位已被PCF字体格式及向量字体格式Opentype和Truetype所取代。PCF档其实是编译好成二进制档的BDF档案,所以更具效率。
Overview
编辑截至2018年[update]当前的最新版本是2.2版。预计未来将没有新版本被修订。早期的版本被称为字符位图分布格式(Character Bitmap Distribution Format)。
在1988年,X财团采用2.1版本的位图字体分布格式作为X窗口系统的屏幕字体的标准格式,[1]但是X窗口系统已经基本迁移到了其他字体标准,例如PCF、Opentype和Truetype。
2.2版添加了对非西方文字的支持。例如,2.2版本的可以定义自上到下的字形而不是仅仅由左至右。
一个位图字体分布格式的字体包括三个部分:
- 一个适用于字体中全部字形的全局设定部分;
- 每个字形都有单独设定的部分;和,
- 字体结束(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" 出现在文件的最后一行,在字体中所有字形都被枚举之后。
注释
编辑- ^ X Window System, Version 11, Release 3. X.Org Foundation. October 1988 [19 January 2016]. (原始内容存档于2018-03-07).
参考资料
编辑- The Unicode Standard, Version 5.0. The Unicode Consortium 5th. Addison-Wesley. October 2006. ISBN 978-0-321-48091-0.