当前位置: 首页 > 面试题库 >

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

匡玉堂
2023-03-14
问题内容

我想创建带有大量字形的字体。想想日本汉字,成千上万。因此,肯定会需要一些脚本/批处理。幸运的是,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有问题呢?在此先感谢您的帮助。


问题答案:

尝试重建您的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。



 类似资料:
  • 问题内容: 我有一个带有汉字文本的文件,我想将这些文本复制到另一个文件中。但是文件输出混乱了中文字符。注意,在我的代码中,我已经在使用“ UTF8”作为编码了: 问题答案: 在这种情况下,请勿使用FileReader,因为它不允许您指定输入编码。在FileInputStream上构造一个InputStreamReader。 像这样:

  • 我在同一个文件夹中有两个文件:chapter1。Rmd和第2章。Rmd,包括以下内容: 第一章Rmd 第2章Rmd 如何将它们组合成一个pdf输出? 当然,渲染(input=“chapter1.Rmd”,output\u format=“pdf\u document”)可以完美地工作,但渲染(input=“chapter1.Rmd”,input=“chapter2.Rmd”,output\u fo

  • 问题内容: 我正在寻找@ font-face CSS规则的MDC页面,但我一无所获。我分别使用粗体 , 斜体 和 粗体+斜体文件 。如何将所有三个文件嵌入一条规则?例如,如果我有: 浏览器将不知道用于粗体显示的字体(因为该文件是DejaVuSansBold.ttf),因此它将默认为我可能不想要的字体。我如何才能告诉浏览器某种字体的所有不同变体? 问题答案: 解决方案似乎是添加多个规则,例如: 顺便

  • 我有多个csv文件(每个文件包含N行(例如,1000行)和43列)。 我想把文件夹中的几个csv文件读入pandas,并将它们合并到一个数据帧中。 不过我还没能弄明白。 问题是,数据帧的最终输出(即,)将所有列(即43列)合并到代码的一列(见附图)屏幕截图中 选定行和列的示例(文件一) 选择的行和列(文件二)Client_IDClient_NamePointer_of_Bins日期权重C00000

  • 等到一个磁盘(没有破折号,只是一堆字节),我会得到一个正确的文件(至少,它可以通过vlc播放) 但是如果我要写文件: 当它们中的一些是正确的(在vlc可以播放的情况下),而其中的一些不是(而且不仅仅是第一个文件是正确的!)显然,不是每一帧都可以在h264文件的开头,但哪一个可以呢?或者哪种方式是正确的存储h264帧在不同的文件? 说到工具,我使用的是C++和live555库,可以使用h264bit

  • 问题内容: 我想将目录中的多个文件读入,并将它们连接成一个大的。我还无法弄清楚。这是我到目前为止的内容: 我想我在for循环中需要一些帮助吗??? 问题答案: 如果所有csv文件中的列均相同,则可以尝试以下代码。我已添加,header=0以便在读取csv第一行后可以将其分配为列名。 import pandas as pd import glob path = r’C:\DRO\DCL_rawdat