倒置字形:通过自动跟踪将位图转换为SVG > 通过Fontforge转换为字形的过程。

6

我正在尝试通过以下步骤创建字体/字形:

  • 使用位图图像
  • 使用Linux上的autotrace创建SVG
  • 使用python-fontforge将轮廓作为字形导入(glyph.importOutlines(svgfile))

这个过程很好,但是生成的字形是倒置的(请参阅图像)。 有什么想法可以防止这种情况发生吗?或者如何倒置SVG或字形等。

源位图: source bitmap

Autotraced SVG: enter image description here

生成的字体: enter image description here

4个回答

16

我通过使用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>

在这里输入图片描述


0

你可以尝试反转路径,不确定fontforge中是否有此选项,但你可以使用inkscape(Path > Reverse)进行操作。


谢谢 Erik,我试过你的建议了,不幸的是它似乎没有起作用... - Hoff

0

看起来你的字形是手绘的。如果你想制作一个包含数十个或数百个字形的完整TTF字体,那么你可以考虑使用Scanahand,我曾用它来生成手绘字体。它使用一个模板,在上面你可以画(或粘贴)字母,以便它们出现在正确的垂直位置。水平位置(和间距)至少在[A-Za-z]中自动计算(将来也可能适用于其他字母)。

但我欣赏你的解决方案,因为它使用免费或开源工具,并且你几乎可以完全控制所有内容(例如间距)。而Potrace和Fontforge最好的地方在于你可以即时处理或创建在线字体服务!Potrace已经移植到AS3(它可以工作,我测试过),现在也有JS版本(https://github.com/antimatter15/js-potracehttps://github.com/dunvi/potrace-js),因此应该也可以制作实时预览窗口,显示当Potrace参数更改时矢量化结果如何变化。

0

如果有人想使用Autotrace进行此操作,那是因为带有白色背景的图像的Autotrace SVG的第一个子元素是定义白色背景的路径。我通过编写一个小程序,在导入之前删除了SVG的第一个子元素来解决了这个问题,但您也可以通过编辑字形在FontForge中删除矩形。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接