我需要对很多字体文件进行子集化,并且需要在python环境中进行操作。但是,Fonttools的文档记录很少,我无法找到模块和适当的函数语法来从python内部基于unicode进行子设置,而不是作为命令行工具(PR
)。我的一些文件在Fonttools读取时包含各种错误,并且无法在jupyter中使用pyftsubset
捕获异常。
答案 0 :(得分:2)
'data': np.ones(3,)
本身就是一个Python脚本,该脚本调用pyftsubset
,后者依次解析fontTools.subset.main
(命令行参数)以执行子设置。您可以在自己的脚本中轻松地完成相同的操作,例如:
sys.argv
很显然,您将要为import sys
from fontTools.subset import main as ss
sys.argv = [None, '/path/to/font/file.ttf', '--unicodes=U+0020-002F']
ss() # this is what actually does the subsetting and writes the output file
使用自己的值以及其他众多的--unicodes
选项,但总的来说,该方案应该可以使用。可能的警告是,如果程序的其他部分使用/依赖pyftsubset
;如果是这种情况,您可能想要在修改sys.argv
并调用子集之前,先在另一个变量中捕获初始值,然后再将其重置为初始值。
答案 1 :(得分:2)
我认为这应该是一种正确的pythonic方式:
from fontTools import subset
subsetter = subset.Subsetter()
subsetter.populate(unicodes=["U+0020", "U+0021"])
subsetter.subset(font)
虽然 font
是您的 TTFont,您可能需要查看文档以了解如何准确传入 unicode 列表。我没有测试这个确切的代码,但我用 subsetter.populate(glyphs=["a", "b"])
测试了它,它做了类似的工作,但用 glyphNames 代替。 populate
方法可以采用以下文档中的参数:populate(self, glyphs=[], gids=[], unicodes=[], text='')
我在 this discussion 中找到了线索。