gpt4 book ai didi

fonts - 通过 fontforge 脚本获取字形宽度

转载 作者:行者123 更新时间:2023-12-02 03:40:06 26 4
gpt4 key购买 nike

为了获取字形宽度,我将 TTF 字体转换为 AFM ,然后解析 AFM 文件的内容以获取每个字形的宽度。

从技术上讲,fontforge正在从二进制TTF文件中捕获字形宽度,然后基于AFM标准模板创建AFM字体文件。我想知道是否可以通过 fontforge 命令直接将 TTF 文件转换为字形宽度列表?!?

最佳答案

FontForge 包含两个解释器,因此您可以编写脚本来修改字体。其中一种解释器是 Python(首选),一种是遗留语言。 Fontforge 嵌入了 Python,但也可以将 Fontforge 构建为 Python 扩展。

那么您将使用什么:Python 还是传统语言?什么界面:命令行GUIPython扩展

命令行和旧语言

脚本可以位于文件中,也可以只是作为参数呈现的字符串。您可能需要通过 -lang 参数指定要使用的解释器。请参阅Command Line Arguments .

$ fontforge -script scriptfile.pe {arguments}
$ fontforge -c "script-string" {arguments}
$ fontforge -lang={ff|py} -c "script-string"

扫描 documentation 后我写了我的 scriptfile.pe:

Open($1, 1)
Select($2)
Print( GlyphInfo('Width') )

比:

$ fontforge -script scriptfile.pe YourFont.ttf A
... # Some output truncated.
1298

从 GUI 执行脚本

打开字体。然后选择:"file">“执行脚本...”。输入:

Select('A')
Error(ToString(GlyphInfo('Width')))

点击“确定”。

Fontforge Error Window

Python 扩展

首先是单个字形的宽度( docs ):

>>> 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/except 因为 f.selection.all() 也确实选择了非字形。访问不存在的字形将引发错误。

关于fonts - 通过 fontforge 脚本获取字形宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20955954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com