我正在尝试通过以下步骤创建字体/字形:
- 使用位图图像
- 使用Linux上的autotrace创建SVG
- 使用python-fontforge将轮廓作为字形导入(glyph.importOutlines(svgfile))
这个过程很好,但是生成的字形是倒置的(请参阅图像)。 有什么想法可以防止这种情况发生吗?或者如何倒置SVG或字形等。
源位图:
Autotraced SVG:
生成的字体:
我通过使用potrace而不是autotrace来解决了这个问题。
参考以下步骤:
将位图转换为SVG(Linux命令行):
potrace -s sourceimg.bmp
如何在 Python 中使用 SVG 作为字形:
import fontforge
font = fontforge.open('blank.sfd')
glyph = font.createMappedChar('A')
glyph.importOutlines('sourceimg.svg')
font.generate('testfont.ttf')
就这样,以下是可用于网站的结果:
css:
@font-face
{
font-family: testfont;
src: url('testfont.ttf');
}
HTML:
<span style="font-family:testfont; font-weight:normal; color:green;">A</span>
<span style="font-family:testfont; font-weight:bold; color:green;">A</span>
你可以尝试反转路径,不确定fontforge中是否有此选项,但你可以使用inkscape(Path > Reverse)进行操作。
看起来你的字形是手绘的。如果你想制作一个包含数十个或数百个字形的完整TTF字体,那么你可以考虑使用Scanahand,我曾用它来生成手绘字体。它使用一个模板,在上面你可以画(或粘贴)字母,以便它们出现在正确的垂直位置。水平位置(和间距)至少在[A-Za-z]中自动计算(将来也可能适用于其他字母)。
但我欣赏你的解决方案,因为它使用免费或开源工具,并且你几乎可以完全控制所有内容(例如间距)。而Potrace和Fontforge最好的地方在于你可以即时处理或创建在线字体服务!Potrace已经移植到AS3(它可以工作,我测试过),现在也有JS版本(https://github.com/antimatter15/js-potrace或https://github.com/dunvi/potrace-js),因此应该也可以制作实时预览窗口,显示当Potrace参数更改时矢量化结果如何变化。如果有人想使用Autotrace进行此操作,那是因为带有白色背景的图像的Autotrace SVG的第一个子元素是定义白色背景的路径。我通过编写一个小程序,在导入之前删除了SVG的第一个子元素来解决了这个问题,但您也可以通过编辑字形在FontForge中删除矩形。