Goo*_*bot 4 fonts truetype fontforge
为了获得字形宽度,我将TTF字体转换为AFM,然后解析AFM文件的内容以获得每个字形的宽度.
从技术上讲,fontforge从二进制TTF文件捕获字形宽度,然后AFM基于AFM标准模板创建字体文件.我想知道是否可以TTF通过fontforge命令直接将文件转换为字形宽度列表?!?
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"
Run Code Online (Sandbox Code Playgroud)
扫描文档后,我写了我的scriptfile.pe:
Open($1, 1)
Select($2)
Print( GlyphInfo('Width') )
Run Code Online (Sandbox Code Playgroud)
比:
$ fontforge -script scriptfile.pe YourFont.ttf A
... # Some output truncated.
1298
Run Code Online (Sandbox Code Playgroud)
打开一个字体.然后选择:'文件'>'执行脚本......'.输入:
Select('A')
Error(ToString(GlyphInfo('Width')))
Run Code Online (Sandbox Code Playgroud)
单击"确定".

首先是单个字形(docs)的宽度:
>>> import fontforge
>>> f = fontforge.open("YourFont.ttf")
>>> f['A'].width
1298
Run Code Online (Sandbox Code Playgroud)
这是你的问题的答案.对于每个字形,编码索引,名称和宽度:
>>> 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
>>>
Run Code Online (Sandbox Code Playgroud)
注意:我使用了try/except,因为不知何故f.selection.all()也选择了非字形.访问不存在的字形会引发错误.
| 归档时间: |
|
| 查看次数: |
1882 次 |
| 最近记录: |