BDF字体规范

好久没写东西了,发点以前翻译的东西,关于BDF字体的。原文到网上搜吧,俺的英语水平有限,欢迎指正。
 
字形位图发行格式(BDF)规范
1 介绍
本文描述Adobe的字形位图发行格式(BDF),BDF是为了容易被人和计算机理解而制作的。本文描述的内容如有改变恕不提前通知。
注意:在这一版文档中,“character”(字符)术语已经被更适合的“glyph”(字形)替换了,按照当前工业界的用法,它是正确的描述字体的元素的术语。关键字CHARS和STARTCHAR因为兼容原因被保留了下来。
2 磁带格式
描述的是Adobe提供的保存字体文件磁带的格式,没什么用,就不翻译了。
3 文件格式
BDF文件是以ASCII编码,人类可读的形式发行的。这种文件以整个字体相关的全局信息开始,后面是各个字形的信息和位图。这些数据表现了字体的单独的尺寸和位置。Metrics for multiple writing directions may be included in a single file.
BDF文件一般的格式描述在下面的章节中。每个项目都包含在文本文件的一个分离的行中。在一行中项目用空格分开。行可以无限长。
在文件中描述的值可以是以下类型:字符串,数字,整数。数字型的值可以是实数或整数,也能是有符号的或无符号的。
注意:这个版本取消了行长限制,一个字符串型的值最大长度是65535个字符,因此现在一行至少可以这么长。虽然可以用2.1版的解析器使用2.2的字体,但反过来也行。
3.1 全局字体信息
下面的关键字描述了对整个字体有效的全局信息:
STARTFONT number
number为字体版本号,指明准确的文件格式(如 2.1)
COMMENT string
注释,将被读文件的程序忽略。
CONTENTVERSION integer
(可选)它的值是一个整数,能被安装程序赋值,来明白内部数据的版本。它的值应该只反映位图质量的升级,而不是字形的补充和编码。
FONT string
字体名
SIZE PointSize Xres Yres
本字体字形的point size(磅),设备的x,y分辨率。
FONTBOUNDINGBOX FBBx FBBy Xoff Yoff
字体包围盒大小,宽FBBx(x方向),高FBBy(y方向),左下角相对于原点0(水平书写方向)在x,y方向的偏移。
METRICSSET integer
(可选)韵律,它的值可以是0,1或2。如果不提供,默认是0。如果METRICSSET是1,DWIDTH,SWIDTH关键字成为可选的。
 SWIDTH,DWIDTH,SWIDTH1,DWIDTH1,VVECTOR.
metrics关键字可以定义在全局级,对整个字体定义一个值。当定义在全局级后,还可以在单个的字形信息用同样的关键字定义新值。对于含有大量同一韵律的表意字形的字体,定义全局韵律,对减少最终文件的大小有重要意义。
注意:2.1版只允许SWIDTH,DWIDTH,并只允许在字形级定义。如果兼容2.1,metrics不应该在全局描述。
这些关键字的意义同3.2节。
STARTPROPERTIES n
可选关键字,属性个数,下面跟n个属性。
ENDPROPERTIES
确定属性列表的结束。
3.2 单独的字形信息
单独的字形信息是以CHARS关键字开始的(后跟在字体中的字形数)。单个字形由STARTCHAR和ENDCHAR划分界限;这两个关键字间是韵律信息和位图数据。
字形韵律数据包含比例宽度(相应的轮廓字体字形的设备无关宽度)和屏幕字体字形宽度(以设备像素表示)。比例宽度能被应用程序用于计算行宽和修正圆整错误。
字形数据节由下面关键字开始:
CHARS nglyphs
字体中的字型数,要确保该字形数和实际读入及处理的实际字形数相同,推荐在文件最后进行错误检查。
每个字形由以下描述:
STARTCHAR string
字形名,在基本字体里,它应该符合在PostScript语言轮廓字体编码向量的名字。在应该复合字体(Type 0),其值可以是一个偏移数字或字形ID。
注意:在2.2以前的版本里,这个值限定为一个14个字符的字符串。
ENCODING integer(integer)
integer为一正整数,表示Adobe标准编码值。如果字符不在Adobe标准编码中,ENCODING后跟 -1,并可选的由另一个整数作为非标准编码表示字形索引。
SWIDTH swx0 swy0
在写模式0(水平书写)时x,y方向的比例宽度。比例宽度的类型是数字(Number),单位是字形宽度的1/1000,相应的宽度在AFM文件里(for轮廓字体)。如果字形大小是p磅,则宽度信息必须乘以p/1000,才能得到字形在打印机上的宽度。这个宽度信息应该被当作下一个字形原点相对于本字形原点的位置的向量指示。对索引写模式0的字体SWIDTH是强制要有的。
要转化比例宽度到设备像素数,需要SWIDTH*(p/1000)*(r/72),r是设备分辨率(像素每英寸)。结果是一个以设备像素数表示的理想宽度的实数。实际设备宽度必须是一个整数像素数,它由DWIDTH项目给出。
DWIDTH dwx0 dwy0
以设备像素数给出的字形宽度,用于指出下一个字形原点相对于本字形原点的位置。对写模式0的字体必须有该项目。
SWIDTH1 swx1 swy1
同SWIDTH,只是对写模式1的字体(垂直书写)。
DWIDTH1 dwx1 dwy1
同DWIDTH,只是对写模式1的字体(垂直书写)。
注意:如果METRICSSET设为1或2,则SWIDTH1和DWIDTH1必须都提供;如果设为0,两个都不能出现。
VVECTOR xoff yoff
可选的,描述一个从原点0(水平书写)到原点1(垂直书写)的向量。如果METRICSSET设为1或2,VVECTOR必须在全局或单独字形中描述。全局定义后,所有字形VVECTOR值相同,但可以通过在个别字形中定义改变个别字形的VVECTOR值。
BBX BBw BBh BBxoff0x BByoff0y
BBw是黑色像素在x方向宽度,BBh是黑色像素在y方向高度。BBxoff0x,BByoff0y是从原点0到位图左下角的位移。所有值都是整数像素数。
BITMAP<hex data>
BITMAP包含字符位图的十六进制数据。从BBX的BBh值,发现有BBh行十六进制编码的位图,在最近的字节的右边填充0 。十六进制数据通过一次两个字节(hex字符)转到二进制,每个字符表示8bit中的4bit。
ENDCHAR
一个字形描述的终结。
ENDFONT
字体文件的终结。如果在读入所有字符前遇到,将产生一个错误。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值