我编写了一个python脚本,该脚本读取METAFONT文件,在其上运行METAPOST(生成约250个PostScript文件),将这些PostScript文件导入FontForge中并输出OpenType字体。这是此脚本的简化版本:
import os,sys,fontforge,glob,subprocess,tempfile,shutil
if __name__ == "__main__":
mffile = os.path.abspath(sys.argv[1])
tempdir = tempfile.mkdtemp()
font = fontforge.font()
subprocess.call(
['mpost',
'&mfplain',
'\mode=localfont;',
'mag:=100.375;',
'outputtemplate:="%c.eps";',
'input %s;' % mffile,
'bye'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=tempdir)
glyph_files = glob.glob(os.path.join(tempdir, "*.eps"))
for eps in glyph_files:
code = int(os.path.splitext(os.path.basename(eps))[0])
glyph = font.createChar(code)
glyph.importOutlines(eps, ("toobigwarn", "correctdir"))
font.generate("font.otf")
shutil.rmtree(tempdir)
exit(0)
目前,这250个PostScript文件存储在一个临时目录中。为了使事情更快,我希望将它们存储在内存中。因此,tempdir应该是内存中的目录。我已经尝试过MemoryFS(类似这样
from fs.memoryfs import MemoryFS
mem = MemoryFS()
mem.makedir('temdpir')
),但我无法弄清楚如何访问tempdir中的文件,从而
glyph_files = glob.glob(os.path.join(tempdir, "*.eps"))
作品。
您对如何访问这些文件有建议吗?谢谢你。(也欢迎使用MemoryFS的替代方法。)
根据docs进行编码,这getsyspath
是获取操作系统支持的文件路径的方法。但是,MemoryFS
不会由真实的文件系统支持,并且不会覆盖的默认实现,fs.base.FS
它将提高NoSysPathError
。
内存支持的文件系统实现将取决于您的操作系统。例如,在现代linux中,您可以挂载一个tmpfs
分区,该分区看起来像虚拟文件系统中的其他文件夹,但是文件将存储在内存中。但是请注意,如果系统内存不足,则某些页面tmpfs
可能会移到交换区域。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句