如何在python环境中而不是从命令行使用Fonttools的pyftsubset
我需要对很多字体文件进行子集,我需要在python环境中完成这项工作。然而,Fonttools的文档非常缺乏,我无法在python中找到基于unicode执行子集设置的模块和正确的函数语法,而不是作为命令行工具(如何在python环境中而不是从命令行使用Fonttools的pyftsubset,python,fonts,ttx-fonttools,Python,Fonts,Ttx Fonttools,我需要对很多字体文件进行子集,我需要在python环境中完成这项工作。然而,Fonttools的文档非常缺乏,我无法在python中找到基于unicode执行子集设置的模块和正确的函数语法,而不是作为命令行工具(pyftsubset)。我的一些文件在Fonttools读取时包含各种错误,我无法使用捕获异常!jupyter内部的command。pyftsubset本身只是一个Python脚本,它调用fontTools.subset.main,然后解析sys.argv(命令行args)以执行子集设置
pyftsubset
)。我的一些文件在Fonttools读取时包含各种错误,我无法使用捕获异常!jupyter内部的command
。pyftsubset
本身只是一个Python脚本,它调用fontTools.subset.main
,然后解析sys.argv
(命令行args)以执行子集设置。您可以在自己的脚本中轻松完成相同的操作,例如:
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
;如果是这种情况,您可能希望在修改sys.argv并调用子服务器之前捕获另一个变量中的初始值,然后将其重新设置为之后的初始值。pyftsubset
本身只是一个Python脚本,它调用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
;如果是这种情况,您可能希望在另一个va中捕获初始值在修改sys.argv
并调用子服务器之前,请执行riable,然后将其重新设置为之后的初始值。我认为这应该是正确执行此操作的一种python方法:
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='')
我在中找到了一个线索。我认为这应该是一种正确的方法:
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='')
我在中找到了一个线索。谢谢你的解决方案。是否可以更优雅地运行它,即访问实际执行子集设置的函数?我检查了源代码和子集模块的
\uu main\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu.py
以某种方式引用了自身。这里,from\uuuuuuuuuuuuuuuuuuuuuuuuuuuu future\uuuuuuuuuuuuuuuurt from fontTools.misc.py23 import*导入sys from fontTools.subset import main如果_uname_uu='__umain_uuu':sys.exit(main())
方法是创建您自己的fontTools.subset.subset
对象,并用您想要的值填充它,然后调用该对象的subset()
方法在您创建的fontTools.ttLib.TTFont
对象上执行…无论如何,对我来说,所有这些都不如简单地使用文档化的命令行选项设置sys.argv
,然后调用fontTools.subset.main()
带有字体路径。感谢您的解决方案。是否可以更优雅地运行它,即访问实际进行子集设置的函数?我检查了源代码和子集模块的\uuuu main\uuuuuuuupy
以某种方式引用了自身。这里,from\uuuu future\uuuuuuuuuu导入打印函数,除法,从f导入绝对值ontTools.misc.py23 import*import sys from fontTools.subset import main如果_uname_uu='_u main_uuu':sys.exit(main())
方法是创建您自己的fontTools.subset.subset
对象,并用您想要的值填充它,然后调用该对象的subset()
方法在您创建的fontTools.ttLib.TTFont
对象上执行…无论如何,对我来说,所有这些都不如简单地使用文档化的命令行选项设置sys.argv
,然后使用字体路径调用fontTools.subset.main()
。