首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用fontforge脚本获取字形宽度

用fontforge脚本获取字形宽度
EN

Stack Overflow用户
提问于 2014-01-06 17:44:00
回答 1查看 3K关注 0票数 4

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-07 10:42:13

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

那么,您将使用什么: Python或Legacy语言?什么界面:命令行、GUI或Python扩展

命令行和遗留语言

脚本可以放在文件中,也可以是作为参数表示的字符串。您可能需要指定与-lang参数一起使用的解释器。见命令行参数

代码语言:javascript
运行
复制
$ fontforge -script scriptfile.pe {arguments}
$ fontforge -c "script-string" {arguments}
$ fontforge -lang={ff|py} -c "script-string"

在扫描了文档之后,我编写了scriptfile.pe:

代码语言:javascript
运行
复制
Open($1, 1)
Select($2)
Print( GlyphInfo('Width') )

超过:

代码语言:javascript
运行
复制
$ fontforge -script scriptfile.pe YourFont.ttf A
... # Some output truncated.
1298

从GUI执行脚本

打开字体。而不是选择:‘文件’>‘执行脚本.’.输入:

代码语言:javascript
运行
复制
Select('A')
Error(ToString(GlyphInfo('Width')))

单击“确定”。

Python扩展

首先,单个字形(文档)的宽度:

代码语言:javascript
运行
复制
>>> import fontforge
>>> f = fontforge.open("YourFont.ttf")
>>> f['A'].width
1298

这是你问题的答案。对于每个字形,编码索引、名称和宽度:

代码语言:javascript
运行
复制
>>> 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()也选择了非象形文字。访问不存在的字形将引发错误。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20955954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档