SVG 字形转 SVG/TTF/OTF 字体

问题描述 投票:0回答:1

我的目标是从 SVG 文件创建一种字体,我将使用基于 GUI 的 SVG 编辑器 (Affinity Designer) 创建该字体。

我试图了解字体文件(TTF/OTF)是如何工作的,所以如果这是错误的,请纠正我。根据我的快速研究,字体文件似乎只是 XML 表,其中包含有关如何“绘制”字体的各个字形的信息。

我的问题是,如何创建一个脚本来从 SVG Glyphs 目录创建这些字体文件类型?

我知道如何迭代目录中的文件,但是我可以使用什么来创建这些字体文件类型? fontTools 的文档似乎有点超出我的理解范围。我只能用Python编程。

我不期望任何人提供完整的过程答案,但如果有人能指出我正确的资源方向,我将不胜感激!

python-3.x svg fonts
1个回答
4
投票

TrueType 或 OpenType 字体文件不是 XML;它们是一种二进制文件格式,以表格目录开头,后跟几个不同的表格,其中包含字体工作所需的不同类型的信息。例如,每种字体必须有一个“水平标题”表,该表提供用于水平文本布局的度量信息,例如上升和下降距离;并且每种字体都必须有一个字符到字形索引映射表,该表为每个受支持的 Unicode 字符指定默认使用的字形。

不同类型的数据表都用一个四字节的标签来标识,称为将字节视为ASCII字符。所以,使用上面提到的两个表,水平表头表使用标签‘hhea’;字符到字形索引映射表使用标签“cmap”。

OpenType 字体可以支持单色字形或多色(“彩色”)字形。既然你提到了 SVG,我假设你想要制作一种彩色字体。

OpenType 支持使用不同格式的颜色字形,每种格式都有专用的表格格式/标签。

  • 位图:由于历史原因,实际上有两种不同的表格式:“sbix”表,主要由 Apple 使用;以及主要由 Google 使用的“CBDT”表。
  • 分层字形(矢量):“COLR”表将每个颜色字形定义为分层堆栈中的字形数组,每个字形都有单独的颜色。
  • “SVG”表使用嵌入的 SVG 文档定义每个颜色字形。

当然,对于您的情况,“SVG”表似乎最适用。但请注意,并非所有平台或应用程序都支持它。 Microsoft Windows 支持上述所有四种格式;另一方面,Android 不支持“SVG”表格。在 Windows 上,旧版本的 Edge 浏览器支持使用“SVG”表的彩色字体,但较新的基于 Chromium 的版本则不支持。 “SVG”表最初是由 Adobe 和 Mozilla 提出的,因此 Adobe 应用程序和 Firefox 是您可以信赖它工作的环境。

使用“SVG”表创建彩色字体并不像收集一组 SVG 文档并将它们编译成带有“SVG”表的 OpenType 文件那么简单。还有其他必需的表格才能使其成为功能字体。您可以使用一些工具将“SVG”表添加到功能字体中;例如,请参阅 Microsoft 的 OpenType SVG 字体编辑器。还有一些从头开始创建字体的工具为“SVG”表提供支持;例如,请参阅High-Logic 的 FontCreator

您可能想更熟悉 OpenType 格式:请参阅 OpenType 规范 了解当前版本的规范;有关“SVG”表的详细信息,请参阅SVG — SVG(可缩放矢量图形)表,特别是注意不支持的 SVG 部分,或不建议实现支持的部分(因此未得到广泛支持) ).

另外值得一提的是,新版本的 COLR 表正在开发中,将为 COLR 表添加很多 SVG 的功能。 (原始版本是版本 0;新版本是版本 1。)COLR v1 表的应用程序相对于“SVG”表的一个主要优势是 COLR v1 是一种二进制格式,不需要使用 XML 和 CSS 解析器;字体的一个主要优点是 COLR v1 比“SVG”表更紧凑(更小的字体文件)。已发布的 OpenType 规范尚未包含此内容(很快就会有更新规范的 alpha 版),但您可以在此处看到完整的提议规范(以 ISO 标准提议修订的形式)。


附录:

OpenType 1.9 于 2021 年 12 月随 COLRv1 发布。 OpenType 1.9.1 即将发布,其中对 COLRv1 进行了一些澄清,并对扫描渐变的处理方式进行了修订。

Google Fonts 团队开发了

nanoemoji,这是一个 Python 库,可用于使用 COLRv1(或其他类型的彩色字体)构建彩色字体。为了构建 COLRv1 字体,它使用 SVG 文件集合作为源艺术品。

© www.soinside.com 2019 - 2024. All rights reserved.