SVG 字形到 SVG/TTF/OTF 字体
SVG Glyphs to SVG/TTF/OTF Font
我的目标是从我将使用基于 GUI 的 SVG 编辑器 (Affinity Designer) 创建的 SVG 文件创建字体。
我正在尝试了解字体文件 (TTF/OTF) 的工作原理,如果有误请指正。根据我的快速研究,字体文件似乎只是 XML 表格,其中包含有关如何“绘制”字体的各个字形的信息。
那么我的问题是,我如何创建一个脚本来从 SVG Glyphs 目录创建这些字体文件类型?
我知道如何遍历目录中的文件,但我可以使用什么来创建这些字体文件类型? fontTools 的文档似乎有点让我头疼。我只能在 Python.
中编程
我不希望任何人提供完整的流程答案,但如果有人能为我指出正确的资源方向,我将不胜感激!
TrueType 或 OpenType 字体文件不是 XML;它们是一种二进制文件格式,以 table 目录开头,后跟几个不同的 table 目录,其中包含字体工作所需的不同类型的信息。例如,每种字体都必须有一个“水平header”table,它提供用于水平文本布局的度量信息,例如上升距离和下降距离;并且每种字体都必须有一个字符到字形索引的映射 table,它为每个支持的 Unicode 字符指定默认使用的字形。
不同类型的数据table均以four-byte标签标识,指的是将字节视为ASCII字符。所以,使用上面提到的两个table,水平的header table使用标签'hhea';字符到字形索引映射 table 使用标签 'cmap'.
OpenType 字体可以支持单色字形或多色(“彩色”)字形。既然你提到了 SVG,我假设你想做一个彩色字体。
OpenType 支持使用不同格式的彩色字形,每种格式都有专用的 table format/tag。
- 位图:由于历史原因,实际上有两种不同的table格式:'sbix' table,主要由Apple使用;和 'CBDT' table,主要由 Google.
使用
- 分层字形(矢量):'COLR' table 将每个颜色字形定义为字形数组,每个字形在分层堆栈中都有单独的颜色。
- 'SVG ' table 使用嵌入的 SVG 文档定义每个颜色字形。
当然,对于您的情况,'SVG ' table 似乎最适用。但是请注意,并非所有平台或应用程序都支持它。 Microsoft Windows 支持上述所有四种格式;另一方面,Android 不支持 'SVG ' table。在 Windows 上,旧版本的 Edge 浏览器支持使用 'SVG ' table 的彩色字体,但较新的 Chromium-based 版本不支持。 'SVG ' table 最初是由 Adobe 和 Mozilla 提出的,因此 Adobe 应用程序和 Firefox 是您可以信赖它的环境。
使用 'SVG ' table 创建彩色字体并不像收集一组 SVG 文档并使用 'SVG ' [=63= 将它们编译成 OpenType 文件那么简单].还有其他必需的 tables 才能使其成为功能性字体。您可以使用一些工具将 'SVG ' table 添加到功能字体中;例如,参见 Microsoft 的 OpenType SVG Font Editor. And there are tools for creating fonts from scratch that provide support for the 'SVG ' table; for example, see High-Logic's FontCreator.
您可能想更熟悉 OpenType 格式:有关 'SVG ' table 的详细信息,请参阅 OpenType Specification for the current version of the spec; and see SVG — The SVG (Scalable Vector Graphics) Table — 特别要注意 SVG 的部分不支持,或者不建议实现支持(因此不广泛支持)。
另外值得一提的是,正在开发新版本的 COLR table,它将在 COLR table 中添加大量 SVG 功能。 (原始版本为版本 0;新版本为版本 1。)COLR v1 table 应用程序相对于 'SVG ' table 的一个主要优势是 COLR v1 是二进制格式,并且不需要使用 XML 和 CSS 解析器;字体的一个主要好处是 COLR v1 比 'SVG ' table 更紧凑(字体文件更小)。已发布的 OpenType 规范还没有这个(更新后的规范很快就会有一个 alpha),但是你可以看到完整的提议规范(以对 ISO 标准的提议修订的形式)here.
我的目标是从我将使用基于 GUI 的 SVG 编辑器 (Affinity Designer) 创建的 SVG 文件创建字体。
我正在尝试了解字体文件 (TTF/OTF) 的工作原理,如果有误请指正。根据我的快速研究,字体文件似乎只是 XML 表格,其中包含有关如何“绘制”字体的各个字形的信息。
那么我的问题是,我如何创建一个脚本来从 SVG Glyphs 目录创建这些字体文件类型?
我知道如何遍历目录中的文件,但我可以使用什么来创建这些字体文件类型? fontTools 的文档似乎有点让我头疼。我只能在 Python.
中编程我不希望任何人提供完整的流程答案,但如果有人能为我指出正确的资源方向,我将不胜感激!
TrueType 或 OpenType 字体文件不是 XML;它们是一种二进制文件格式,以 table 目录开头,后跟几个不同的 table 目录,其中包含字体工作所需的不同类型的信息。例如,每种字体都必须有一个“水平header”table,它提供用于水平文本布局的度量信息,例如上升距离和下降距离;并且每种字体都必须有一个字符到字形索引的映射 table,它为每个支持的 Unicode 字符指定默认使用的字形。
不同类型的数据table均以four-byte标签标识,指的是将字节视为ASCII字符。所以,使用上面提到的两个table,水平的header table使用标签'hhea';字符到字形索引映射 table 使用标签 'cmap'.
OpenType 字体可以支持单色字形或多色(“彩色”)字形。既然你提到了 SVG,我假设你想做一个彩色字体。
OpenType 支持使用不同格式的彩色字形,每种格式都有专用的 table format/tag。
- 位图:由于历史原因,实际上有两种不同的table格式:'sbix' table,主要由Apple使用;和 'CBDT' table,主要由 Google. 使用
- 分层字形(矢量):'COLR' table 将每个颜色字形定义为字形数组,每个字形在分层堆栈中都有单独的颜色。
- 'SVG ' table 使用嵌入的 SVG 文档定义每个颜色字形。
当然,对于您的情况,'SVG ' table 似乎最适用。但是请注意,并非所有平台或应用程序都支持它。 Microsoft Windows 支持上述所有四种格式;另一方面,Android 不支持 'SVG ' table。在 Windows 上,旧版本的 Edge 浏览器支持使用 'SVG ' table 的彩色字体,但较新的 Chromium-based 版本不支持。 'SVG ' table 最初是由 Adobe 和 Mozilla 提出的,因此 Adobe 应用程序和 Firefox 是您可以信赖它的环境。
使用 'SVG ' table 创建彩色字体并不像收集一组 SVG 文档并使用 'SVG ' [=63= 将它们编译成 OpenType 文件那么简单].还有其他必需的 tables 才能使其成为功能性字体。您可以使用一些工具将 'SVG ' table 添加到功能字体中;例如,参见 Microsoft 的 OpenType SVG Font Editor. And there are tools for creating fonts from scratch that provide support for the 'SVG ' table; for example, see High-Logic's FontCreator.
您可能想更熟悉 OpenType 格式:有关 'SVG ' table 的详细信息,请参阅 OpenType Specification for the current version of the spec; and see SVG — The SVG (Scalable Vector Graphics) Table — 特别要注意 SVG 的部分不支持,或者不建议实现支持(因此不广泛支持)。
另外值得一提的是,正在开发新版本的 COLR table,它将在 COLR table 中添加大量 SVG 功能。 (原始版本为版本 0;新版本为版本 1。)COLR v1 table 应用程序相对于 'SVG ' table 的一个主要优势是 COLR v1 是二进制格式,并且不需要使用 XML 和 CSS 解析器;字体的一个主要好处是 COLR v1 比 'SVG ' table 更紧凑(字体文件更小)。已发布的 OpenType 规范还没有这个(更新后的规范很快就会有一个 alpha),但是你可以看到完整的提议规范(以对 ISO 标准的提议修订的形式)here.