所以我有一个字体,我做了一段时间,当时没有用它做任何事情,当我在我的电脑上重新安装操作系统时,我丢失了一些原始的SVG,字体已满包含大量字符的unicode,保存在字体中的所有图标都在正常字符范围之外,我知道可以使用此命令从字体中提取一堆SVG
fontforge -lang=ff -c 'Open($1); SelectWorthOutputting(); foreach Export("svg"); endloop;' Typeface.ttf
和
fontforge -lang=ff -c 'Open($1); SelectAll(); foreach Export("svg"); endloop;' Typeface.ttf
然而,第一个完全错过了图标,第二个没有区别。所有图标都在文件中的两个点之间,从U+e000
开始,一直到U+e17d
我想知道如何提取这两个点之间的所有图标。如果可能的话,可以使用namelist.txt进行命名。
答案 0 :(得分:1)
如何从 fontforge 中提取两个 Unicode 值之间的几个字符?
概念上最简洁的方法是遍历您指定的十六进制数字范围,并对其中的每一个都调用 font[char_name].export()。然而,这带来了增加十六进制数的麻烦(虽然可行,但比我要提出的要复杂一些)。
以下与函数“nameFromUnicode(position)”配对的 for 循环应该可以解决问题,同时保持(大部分)没有十六进制。函数 'nameFromUnicode(position)' 将 Unicode 字符的位置作为整数,并返回该位置的字符名称(类似于 Uni2D42)。然后可以将此名称传递给 font[that_char_name].export() 以导出它。要以十进制查找范围的开始和结束位置,只需将字符名称解释为十六进制数并将其转换为十进制。在您的情况下,e000 变为 57344,e17d 变为 57725。十进制范围将是从 57344 到 57725。
下面的代码片段是一个简单的循环,提取指定范围内的字符(尽管对于 '.png' 而不是 '.svg';尽管调整它应该是相当直接的)。
from fontforge import *
font = open("/path/to/your/.ttf/file")
for position in range(57344,57726):
glyph = nameFromUnicode(position)
font[glyph].export(font[glyph].glyphname + ".png", 150)
我不太明白你关于匹配 namelist.txt 的第二个问题。如果 5 年后你仍然渴望得到答案,欢迎详细说明,我会看看我是否能想出一个答案。