在两个unicode值fontforge之间提取所有SVG

时间:2015-09-02 23:56:26

标签: python svg unicode fonts fontforge

所以我有一个字体,我做了一段时间,当时没有用它做任何事情,当我在我的电脑上重新安装操作系统时,我丢失了一些原始的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进行命名。

1 个答案:

答案 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 年后你仍然渴望得到答案,欢迎详细说明,我会看看我是否能想出一个答案。