BDF 字体文件格式

提交者: Addylee 日期: 2009/7/13 23:12 阅读: 316

来源:www.osplay.org

摘要: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(比点阵的总宽度少了两个像素),同理高度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
    

    参考资料和截图:

  • http://www.tsg.ne.jp/GANA/S/pcf2bdf/pcf.pdf
  • http://partners.adobe.com/public/deve ... en/font/5005.BDF_Spec.pdf
  • http://en.wikipedia.org/wiki/Glyph_Bitmap_Distribution_Format

出处: http://www.osplay.org/modules/article/view.article.php/16

BDF 字体文件格式相关推荐

  1. BDF 字体文件格式(转)

    提交者: Addylee 日期: 10/31 7:50 阅读: 55 摘要: BDF是Adobe制定的点阵字体文件,也是XWindow系统中使用的字体文件,我在学校过程中发现,网上资料比较少,中文资料 ...

  2. qt QPF 字体各个字段的意义

    --[QT环境搭建]qt字库的移植(使其很好的显示中文) 1 如何定制字库(移植字库)     需要将至少两个文件赋值到....lib/font目录下1. fontdir 文件.这个是应用程序寻找当前 ...

  3. 【Qt开发】【ARM-Linux开发】 QT在ARM上显示字体的问题

    在PC机上利用QT开发的应用程序在 设置字体时,在PC上运行,可根据自己的设置,字体随之变大或变小.而移植到ARM上运行时发现,显示 字 体与所设置的字体不用,字体普遍偏小.经过上网搜索发现,是环境变 ...

  4. Python +tensorflow+pygame 破解任意字体反爬

    什么是字体反爬? 每个字符在 都可以用 unicode 编码表示  而字体文件可以理解为Unicode 和 字体形状的映射 ,所以在计算机中字符可以变成我们人类所能理解的形状,所以字体反爬的关键就是字 ...

  5. Symbian OS应用编程图形篇之字体(1)

    在介绍如何使用和显示Symbian OS 中的字体之前,我想应该先了解一下有关字体一些基本概念相关知识. Font .typeface and glyph Font是一套字符集,包括字母.数字和符号等 ...

  6. woff, 在网页中嵌入任意字体的解决方案

    woff, 在网页中嵌入任意字体的解决方案 http://topic.csdn.net/u/20110705/10/98e79aba-1ddf-42fa-84a9-b79ec494cb69.html ...

  7. 如何在网页中嵌入自己想要的字体(实例下载)

    记得以前在国外那些人的网站看到那些字体怎么那么漂亮.而且不像电脑里面自带的字体.原来是通过这个方法来实现的.厉害,我觉得中文那些比较好看的字体,如果能都看到那该多好,不过看中文的TTF字体10M左右. ...

  8. html css图标怎么跟文字并排,CSS高级技巧:精灵图、字体图标、CSS三角做法、CSS用户界面样式、vertical-align属性应用、溢出文字省略号、常见布局技巧...

    CSS高级技巧目录 1.精灵图 使用原因:一个网页往往会有很多小的背景图片作为装饰,为了有效减少接收和发送请求的次数,提供页面加载速度,所以出现了精灵技术.核心原理就是将小图片整合到一张图里,这样浏览 ...

  9. Android字体简介

    Android字体简介 Android系统默认支持三种字体,分别为:"sans","serif","monospace". android. ...

  10. hwt字体转换ttf_五分钟教你弄懂了字体反爬是个啥

    今天的文章内容主要是关于字体反爬. 目前已知的几个字体反爬的网站是猫眼,汽车之家,天眼查,起点中文网等等. 以前也看过这方面的文章,今天跟个老哥在交流的时候,终于实操了一把,弄懂了字体反爬是个啥玩意. ...

最新文章

  1. 如何在安装程序中判断操作系统是否是64位 inno
  2. java sender_Spring Boot用JavaMailSender发送邮件方法
  3. bootstrap模态框和select2合用时input无法获取焦点
  4. JS实现Sql语句格式化效果
  5. 【STC15】通过PWM波实现呼吸灯效果
  6. pagehelper版本升级导致pageSize为0时无法查询全部数据
  7. matlab生成指数分布,如何在matlab中生成负指数分布和均匀分布的随机数
  8. 解读微信多开技巧,Python tk 实现微信多开脚本exe工具
  9. 大疆FPGA/芯片开发工程师(A卷)笔试题(含详解)
  10. Android Studio Win7安装
  11. MongoDB4.0 配置文件
  12. 魔兽三国服务器维护,官方平台霸榜三个月《魔兽争霸3》神仙三国重新定义防守玩法...
  13. python循环引用的解决办法
  14. Cocos Creator中退出游戏,暂停,继续
  15. (信息物理系统)《An architectural approach to the design and analysis of cyber-physical systems》
  16. Linux 安装Oracel18C完整版
  17. win10安装.NET Framework 3.5的方法
  18. 8086+ADC0808+8255A电压测量数码管显示Proteus仿真
  19. CSDN黑板报背景图片
  20. 我们应该怎样做时间管理?

热门文章

  1. 搜索引擎提交入口总结
  2. xhEditor技术手册
  3. ASO优化含义篇:积分墙是什么?
  4. 联想拯救者Y7000关闭触摸板
  5. js递归遍历树形json数据
  6. Contest2609 - 高级语言程序实践--第8次作业--计信A2107-2113
  7. GFLOPS和GMACS概念
  8. STC51单片机中断介绍
  9. 蓝色主题登陆页面界面模板
  10. 运动目标检测MATLAB实现