renjwjx的专栏

首页博文目录订阅
正 文

BDF 字体文件格式

(2008-12-23 16:18)
BDF 字体文件格式 提交者: Addylee 日期: 10/31 7:50 阅读: 59
摘要:BDF是Adobe制定的点阵字体文件,也是XWindow系统中使用的字体文件,我在学校过程中发现,网上资料比较少,中文资料基本没有,因此我在阅读相关英文资料的基础上,根据自己的理解写了这篇总结与大家交流,错误和不完善的地方,期待各位斧正。 标题
  1. 字体文件整体信息
  2. 字体文件属性信息
  3. 字体信息

BDF是XWindow系统中使用的字体文件,全称是Glypn BitmapDistribution Format (BDF)。BDF是Adobe制定的,他是点阵字体的文本描述。因此可以直接使用文本编辑器直接浏览。BDF的文档见http://partners.adobe.com/public/deve ... en/font/5005.BDF_Spec.pdf

字体文件整体信息

下面是文泉驿(http://wenq.org/)点阵宋体的对应的BDF文件片段:

STARTFONT 2.1 
FONT -wenquanyi-wenquanyi bitmap song-medium-r-normal--16-160-75-75-P-80-iso10646-1 
SIZE 16 75 75 
FONTBOUNDINGBOX 17 18 -1 -4 
  • STARTFONT 2.1 表示这是BDF规范的版本号,目前的版本号为2.2,2.1是XWindow System使用的字体版本号。
  • FONT 说明了这个文件的基本信息。这里为 -wenquanyi-wenquanyi bitmap song-medium-r-normal--16-160-75-75-P-80-
  • SIZE 指定了每一个字的大小。格式为 SIZE PointSize Xres Yres. 其中PointSize表示每一个点的大小(单位是什么呢?),Xres, Yres分别表示X和Y方向的分辨率,单位是DPI(表示每平方英寸多少个点,值越大单位面积的点越多,对应的分辨率越高。)。
  • FONTBOUNDINGBOX 说明字体点阵方格的基本信息,格式为 FONTBOUNDINGBOX FBBx FBBy Xoff Yoff 这里FBBx FBBy表示字体的宽度和高度,具体意义见后面的例子。 字体文件属性信息下面是属性信息:
    STARTPROPERTIES 22 
    FONT_NAME "WenQuanYi Bitmap Song" 
    FAMILY_NAME "WenQuanYi Bitmap Song" 
    FOUNDRY "WenQuanYi" 
    FONT_VERSION "000.990" 
    WEIGHT_NAME "Medium" 
    SETWIDTH_NAME "Normal" 
    PIXEL_SIZE 16 
    POINT_SIZE 160 
    RESOLUTION_X 75 
    RESOLUTION_Y 75 
    SPACING "P" 
    UNDERLINE_POSITION -2 
    UNDERLINE_THICKNESS 1 
    QUAD_WIDTH 16 
    CHARSET_REGISTRY "ISO10646" 
    CHARSET_ENCODING "-1"
    CHARSET_COLLECTIONS "ASCII ISO8859-5 GB2312.1980 BIG5-0 KSC5601.1989-0 JISX0208.1997 ISO10646-1" 
    WEIGHT 10 
    X_HEIGHT 7 
    DEFAULT_CHAR 0 
    FONT_DESCENT 4 
    FONT_ASCENT 14 
    ENDPROPERTIES 
    
  • STARTPROPERTIES STARTPROPERTIES 22 是属性描述的开始,这里有22个属性字符,ENDPROPERTIES表示属性段结束。其它的都是一些基本属性描述。 字体信息
    CHARS 29889
  • CHARS 说明了这个字体文件中有29889个点阵字体。 每一个字体以一个STARTCHAR开始,ENDCHAR结束,例如:
    STARTCHAR j 
    ENCODING 106 
    SWIDTH 267 0 
    DWIDTH 4 0 
    BBX 4 14 -1 -3 
    BITMAP 
    10 
    00 
    00 
    00 
    10 
    10 
    10 
    10 
    10 
    10 
    10 
    10 
    10 
    E0 
    ENDCHAR 
    
  • STARTTCHAR STARTICHAR 说明了这是哪一个字符,这里是字母j.
  • ENCODING ENCODING表示该字符的UNICODE编码,这里106是j的UNICODE编码(和ASCII码一致)。
  • SWIDTH DWIDTH, BBX 这几个属性的意义在后面的例子中说明。
  • BITMAP 指示了这个字符的点阵,用16进制表示。我们把这个点阵展开成2进制,如下:
    ...........*.... 
    ................ 
    ................ 
    ................ 
    ...........*.... 
    ...........*.... 
    ...........*.... 
    ...........*.... 
    ...........*.... 
    ...........*.... 
    ...........*.... 
    ...........*.... 
    ...........*.... 
    ........***..... 
    
    这里用"."表示"0","*"表示"1"

    现在我们通过实际的例子来看看FONTBOUNDINGBOX和BBX的意义

    在这里,每一个字体都对应一个基本的点阵,BDF文件头部的FONTBOUNDINGBOX说明了基本点阵的大小,FONTBOUNDINGBOX的格式为:

    FONTBOUNDINGBOX  FBBx FBBy Xoff Yoff 
    

    其中FBBx和FBBy指定了X方向和Y方向的像素点的个数,也就是上图中横向和纵向的小格子的数目。在这个例子中,FBBx 为 16,FBBy为20。在图中,o表示坐标原点,Xoff和Yoff表示点阵的左下脚相对原点的坐标值,在这个图中,Xoff为-3,Yoff为-6。在一个字体文件中,每一个字体的基本点阵大小以及原点坐标都是一样的,因此文件头部的FONTBOUNDINGBOX描述了这一个整体信息。 但是不同字体的高度宽度是不一样的,例如j和p就不一样,因此每一个字体都有一个BBX属性,BBX的格式和FONTBOUNDINGBOX类似,

    BBX BBw BBh BBxoff0x BByoff0y
    

    这里BBw表示字体的实际最大宽度,在这个图中,BBw为14(比点阵的总宽度少了两个像素,因为在上图中,字母P的最左边,和最右各有一个空格。),同理高度BBh为15。 BBxoff0x表示字体实际的左下脚相对原点的坐标,这里BBxoff0x为-2,同理BByoff0y为-5。 通过上面的对比就很容易明白FONTBOUNDINGBOX和BBX的区别了。

  • DWIDTH DWIDTH表示Device Width,以像素为单位,主要是面对显示器设备的,表示一个字体的坐标原点和下一个字体坐标原点的距离,例如图中,第一个"+"号为当前字体的坐标原点,第二个"+"号为下一个字体的坐标原点,他们的距离在X方向上是8个像素点,y方向的距离为0,所以DWIDTH为8,0.
  • SWIDTH SWIDTH 是Scalable Width,主要是面向打印机设备的,不是很清楚SWIDTH的具体意义,SWIDTH和DWIDTH的转换关系为: DWIDTH =(SWIDTH / 1000) * (resolution / 72) * PointSize 例如在图中j的SIZE PointSize Xres Yres分别为8 200 200 代入公式可得:
    取整后约等于 8.
    8 = ( 355/1000 ) * ( 200/72 ) * 8 = 0.355 *  2.778 * 8 
    
  • 评 论
    5楼 52RD网友 发表于 2011-7-6 21:51 回复
    grf
    4楼 52RD网友 发表于 2010-3-20 12:50 回复
    swiith是水平宽度,有点的宽度,煤电的不算
    3楼 52RD网友 发表于 2010-3-17 14:52 回复
    swidth计算还是不清楚
    2楼 52RD网友 发表于 2009-10-29 17:57 回复
    不错不错
    1楼 sog329 发表于 2009-4-7 12:57 回复
    Nice
    博 主
    进入renjwjx的首页
    博客名称:MTK
    日志总数:9
    评论数量:26
    访问次数:34503
    建立时间:2008-8-14 17:12
    导 航
    公 告
    本博客主要记录工作之中遇到的问题,或者是相关的一些技术文章!
    评 论