python-3.x - SVG 字形转 SVG/TTF/OTF 字体

标签 python-3.x svg fonts

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

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

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

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

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

最佳答案

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

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

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

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

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

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

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

您可能想更熟悉 OpenType 格式:请参阅 OpenType Specification对于当前版本的规范;并参见SVG — The SVG (Scalable Vector Graphics) Table有关“SVG”表的详细信息,特别是请注意 SVG 中不支持的部分,或者不建议实现支持的部分(因此未得到广泛支持)。

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

关于python-3.x - SVG 字形转 SVG/TTF/OTF 字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66567126/

相关文章:

html - 确定在 Chrome 中呈现的 Web 字体

html - svg+xml base64 url​​ 编码的 firefox 内容 : url(); 问题

html - 自适应 svg 背景

python - CV2改变图像

python - 无法加载 CIFAR-10 数据集 : Invalid load key '\x1f'

html - Raphael JS : Cannot mask objects. 替代品?

android - Android 中正确使用自定义字体

javascript - 如何在 HTML 文本区域中启用非英文字符的输入?

python - 使用函数打开文件(类型为 BytesIO)

python - 如何在 Windows 10 中更改 cmd 上的默认 Python 版本