提交者: Addylee 日期: 10/31 7:50 阅读: 55
摘要: 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
    

BDF 字体文件格式(转)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. Android字体简介

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

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

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

最新文章

  1. 「PKUWC2018」随机游走
  2. ElasticSearch5.5.1插件分类
  3. libco协程库源码解读
  4. Android 应用开发----7. ViewPager+Fragment一步步打造顶部导航界面滑动效果
  5. python3爬虫 - cookie登录实战
  6. 004. Asp.Net Routing与MVC 之二: 请求如何激活Controller和Action
  7. 火狐—火狐浏览器中的“HttpWatch”
  8. 社会工程学之《反欺骗的艺术》小结(二)
  9. 时间序列分析——python
  10. 常用的计算机网络设备有,常用网络设备有哪些,初学者必须要知道的五大网络设备...
  11. 小学计算机教室使用汇报材料,勃李小学“教育信息化示范学校”汇报材料
  12. LTE资源调度(6)-功率余量报告PHR
  13. 陆奇为什么这么值钱? 因为他的原则值钱!
  14. 24c512 c语言程序,msp430读写24c512程序
  15. 服务器上Kafka启动报错:error=‘Cannot allocate memory‘ (errno=12)
  16. 深度学习_深度学习基础知识_TTA(测试时增强)
  17. while(n)什么意思?
  18. Arcgis中如何实现线转面
  19. 原生JS的HTTP请求相关知识
  20. Linux设置gedit运行python

热门文章

  1. 计算机毕业设计PHP+安卓基于Android的物流快递app(源码+程序+lw+远程调试)
  2. isp 图像算法(三)之anti-aliasing filter抗混滤波
  3. er模型转关系模式_ER模型到关系模型
  4. 网络安全学习资源分享
  5. android 鼠标 悬浮,鼠标悬浮球不闪退版本下载-鼠标悬浮球 安卓版v1.1-PC6安卓网...
  6. 传统医学师承和确有专长人员医师资格考核考试办法在全国全面实施
  7. matlab ecef2enu函数,GPS仿真-matlab工具箱
  8. nrf52 SDK15 TWI驱动MAG311x
  9. 【卡尔曼滤波】基于EKF、UPF、PF、EPF、UPF多种卡尔曼滤波实现航迹滤波跟踪matlab源码
  10. linux调节字体大小加粗,Linux下修改终端字体颜色和大小