将一系列.svg文件作为字形导入到FontForge中并输出一个字体文件

发布于 2021-01-29 17:41:40

我想创建带有大量字形的字体。想想日本汉字,成千上万。因此,肯定会需要一些脚本/批处理。幸运的是,FontForge支持python脚本!不幸的是,我无法使其正常运行。[悲伤的脸]

首先,感谢用户Hoff在这里发布代码,该代码回答了我大部分问题。但是在运行他的脚本时,我遇到了引发更多问题的问题:

Failed to find NameList: AGL For New Fonts
Warning: Font contained no glyphs

更新:

  • “字体不包含字形”错误显然是FontForge中的错误,当字体包含一个或更少的字形时会发生。添加第二个字形“ B”解决了此问题。
  • 我发现无论是否保存.ttf .sfd .otf等,都可以使用相同的语法。
  • 实际上,NameList故障不会阻止字体文件的写入。我很高兴发现这一点,但仍然不了解如何提供所需的NameList。

这是霍夫的代码:

import fontforge
font = fontforge.open('blank.sfd')
glyph = font.createMappedChar('A')
glyph.importOutlines('sourceimg.svg')
font.generate('testfont.ttf')

经过昨天五个小时的努力来构建FontForge(在Mac上是一个令人困惑的过程)。我似乎已启动并正常运行。我最初从.dmg安装了预构建版本,但发现它缺少python支持。但是由于Hoff似乎没有遇到与我相同的错误,因此我没有排除构建问题。

无论哪种方式,我都不了解涉及AGL的错误。什么是AGL?我查了一下:“
Adob​​e字形列表-标准字形命名约定”。听起来像FontForge尝试将Unicode值映射到字形名称,但不能。

那么,为什么AGL NameList有问题呢?在此先感谢您的帮助。

关注者
0
被浏览
370
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    尝试重建您的Fonforge。因为代码应该工作。我测试了它,它运行正常。

    我成功使用Homebrew安装了带有Python扩展名的Fontforge 。这是信息:

    allcaps$ brew info fontforge
    fontforge: stable 20120731, HEAD
    http://fontforge.org/
    /usr/local/Cellar/fontforge/20120731 (377 files, 16M) *
      Built from source with: --with-x
    From:
    

    https://github.com/Homebrew/homebrew/commits/master/Library/Formula/fontforge.rb
    ==> Dependencies
    Required: gettext ✘, fontconfig ✔
    Recommended: jpeg ✔, libtiff ✔
    Optional: cairo ✔, pango ✘, libspiro ✘, czmq ✘
    ==> Options
    –with-cairo
    Build with cairo support
    –with-czmq
    Build with czmq support
    –with-gif
    Build with GIF support
    –with-libspiro
    Build with libspiro support
    –with-pango
    Build with pango support
    –with-x
    Build with X11 support, including FontForge.app
    –without-jpeg
    Build without jpeg support
    –without-libpng
    Build without libpng support
    –without-libtiff
    Build without libtiff support
    –without-python
    Build without python support
    –HEAD
    install HEAD version
    ==> Caveats
    Set PYTHONPATH if you need Python to find the installed site-packages:
    export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH

    .app bundles were installed.
    Run `brew linkapps` to symlink these to /Applications.
    

    当然,请使用您需要的所有标志来设置PYTHONPATH
    运行brew install fontforge
    brew linkapps

    更新

    以空字体开头,因此字体不是问题:

    import fontforge
    font = fontforge.font() # create a new font
    
    要包含字形列表(不必要),请下载:http

    //partners.adobe.com/public/developer/en/opentype/glyphlist.txt ,然后:

    import fontforge
    fontforge.loadNamelist(‘glyphlist.txt’) # load a name list

    按代码点创建字形。createChar(uni[,name])‘A’是65

    char = font.createChar(65)
    

    字形及其代码点:

    >>> for c in u'ABC 賢治':  print ord(c). 
    >>> 65, 66, 67, 32, 36066, 27835.
    

    Unicode联盟定义了Unicode标准。“中日韩统一表意文字”存在于“基本多语言平面(BMP)”中。

    没有unicode点的字形可以按名称在字体中引用。并且对于组成新字形的开放式功能部件或构建基块很有用。您可以这样创建它们:

    font.createChar(-1, 'some_name')
    

    更新2

    您应该使用AGL字形名称来命名Adobe字形列表中出现的所有字形。字形的其余部分应该被命名为uniXXXX其中XXXX是Unicode指数。在开发过程中,您可以使用任何可读的名称。因此,请使用您自己的命名并在生成要运输的字体时替换它。见Typophile



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看