为了获取字形宽度,我将TTF
字体转换为AFM
,然后解析AFM
文件的内容以获取每个字形的宽度。
因为从技术上讲,fontforge
是从二进制TTF
文件中捕获字形宽度,然后根据AFM
标准模板创建AFM
字体文件。我想知道是否可以通过fontforge命令将TTF
文件直接转换为字形宽度列表?!?
发布于 2014-01-07 10:42:13
FontForge包括两个解释器,这样您就可以编写脚本来修改字体。其中一个解释器是Python (首选),一个是遗留语言。Fontforge嵌入了Python,但也可以将Fontforge构建为Python扩展。
那么,您将使用什么: Python或Legacy语言?什么界面:命令行、GUI或Python扩展
命令行和遗留语言
脚本可以放在文件中,也可以是作为参数表示的字符串。您可能需要指定与-lang参数一起使用的解释器。见命令行参数。
$ fontforge -script scriptfile.pe {arguments}
$ fontforge -c "script-string" {arguments}
$ fontforge -lang={ff|py} -c "script-string"
在扫描了文档之后,我编写了scriptfile.pe:
Open($1, 1)
Select($2)
Print( GlyphInfo('Width') )
超过:
$ fontforge -script scriptfile.pe YourFont.ttf A
... # Some output truncated.
1298
从GUI执行脚本
打开字体。而不是选择:‘文件’>‘执行脚本.’.输入:
Select('A')
Error(ToString(GlyphInfo('Width')))
单击“确定”。
Python扩展
首先,单个字形(文档)的宽度:
>>> import fontforge
>>> f = fontforge.open("YourFont.ttf")
>>> f['A'].width
1298
这是你问题的答案。对于每个字形,编码索引、名称和宽度:
>>> for i in f.selection.all():
... try:
... name, width = f[i].glyphname, f[i].width
... print i, name, width
... except:
... pass
...
0 uni0009 0
2 uni0002 0
13 nonmarkingreturn 510
# ... Truncated ...
65707 germandbls.smcp 2266
>>>
注意:我使用了try/但因为f.selection.all()
也选择了非象形文字。访问不存在的字形将引发错误。
https://stackoverflow.com/questions/20955954
复制相似问题