介绍
TrueType 字体(.ttf)及其 OpenType 超集(.otf)是现代操作系统上主导的字体格式。两种格式共享基于 OpenType 规范的相同二进制表结构。针对 Python 的 Aspose.Font FOSS 通过 TtfFont 暴露此结构,提供对各个 OpenType 表、字距对数据、可变字体轴以及字形轮廓的直接访问。
TtfFont 类通过 TTF 特定的方法(包括 get_blob、get_table_bytes、set_table_bytes 和用于可变字体轴锁定的 instantiate)扩展了 Font 基类。TtfTableSet 属性(ttf_tables)提供对最常用的 OpenType 表的类型化访问:head、hhea、maxp、os2、name、post。
该库以 aspose-font 的名称在 PyPI 上发布,并采用 MIT 许可证。它没有强制性的商业依赖。
关键特性
加载 TTF 和 OTF 字体
使用 FontLoader.open 加载任意 TrueType 或 OpenType 字体文件:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
print(loaded.font_name)
print(loaded.font_family)
print(loaded.font_style)
print(loaded.num_glyphs)
FontLoader.open 从文件头检测字体格式。支持 .ttf(TrueType)和 .otf(OpenType CFF)文件,且两者都返回一个 TtfFont 实例。
通过 TtfTableSet 访问 OpenType 表
ttf_tables 属性返回一个带有常用 OpenType 表类型化访问器的 TtfTableSet。每个属性返回表对象,若不存在则返回 None:
TtfFont 上的 ttf_tables 属性返回一个 TtfTableSet 实例。可用的表访问器:
head—HeadTable | Nonehhea—HheaTable | Nonemaxp—MaxpTable | Noneos2—Os2Table | Nonename—NameTable | Nonepost—PostTable | None
每个属性返回表对象,若字体文件中不存在该表则返回 None。在读取之前,访问 TtfTableSet 属性以检查特定表是否存在。对于未在命名访问器中覆盖的表,使用 TtfTableSet.get_raw(tag) 通过四字符 OpenType 标记检索原始字节。
读取原始表字节
get_table_bytes(tag) 返回任意 OpenType 表的原始字节。使用 get_blob(tag) 可获得一个在表不存在时返回 None 的 None 安全变体:
TtfFont 提供两种原始表访问方法:
get_table_bytes(tag) -> bytes— 返回指定表的原始字节(若不存在则抛出异常)get_blob(tag) -> bytes | None— 若表不存在则返回None(安全变体)
两种方法都接受四字符的 OpenType 表标签,例如 "cmap"、"GDEF" 或 "GPOS"。当表是可选时使用 get_blob,这样您可以在处理前检查 None。
字距对
get_kern_pairs() 返回字体中编码的所有字距对。每个 KernPair 包含 left(GlyphId)、right(GlyphId)和 value(以字体单位表示的整数):
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
pairs = loaded.get_kern_pairs()
print(f"Kern pairs: {len(pairs)}")
for pair in pairs[:5]:
print(f" Left: {pair.left} Right: {pair.right} Value: {pair.value}")
字体度量
标准度量可通过 metrics 属性访问:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
metrics = loaded.metrics
print(f"Units per em : {metrics.units_per_em}")
print(f"Ascender : {metrics.ascender}")
print(f"Descender : {metrics.descender}")
print(f"Line gap : {metrics.line_gap}")
print(f"Underline pos : {metrics.underline_position}")
可变字体支持
对于可变字体,TtfFont 提供 is_variable、variable_axes 和 named_instances。使用 get_axis(tag) 通过其四字符标签检索特定轴:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/RobotoFlex.ttf")
print(f"Is variable: {loaded.is_variable}")
print(f"Axes : {len(loaded.variable_axes)}")
TtfFont 上的 get_axis(tag) 方法通过四字符标签检索 VariableAxis(例如,"wght" 表示粗细,"wdth" 表示宽度)。如果该轴在字体的 fvar 表中不存在,则返回 None。
转换字体
to_bytes(font_type) 将字体转换为不同的格式。使用 FontType 枚举来指定目标:
from aspose_font import FontLoader, FontType
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
ttf_bytes = loaded.to_bytes(FontType.TTF)
with open("output/Roboto-copy.ttf", "wb") as fh:
fh.write(ttf_bytes)
print(f"Serialized: {len(ttf_bytes)} bytes")
快速入门
安装该库:
.venv/bin/pip install aspose-font
加载 TTF 字体并检查它:
from aspose_font import FontLoader, FontType
loaded = FontLoader.open("Roboto-Regular.ttf")
print(f"Font name : {loaded.font_name}")
print(f"Family : {loaded.font_family}")
print(f"Glyphs : {loaded.num_glyphs}")
print(f"Variable : {loaded.is_variable}")
metrics = loaded.metrics
print(f"UPM : {metrics.units_per_em}")
ttf_bytes = loaded.to_bytes(FontType.TTF)
print(f"Serialized: {len(ttf_bytes)} bytes")
支持的格式
| 格式 | 扩展名 | 读取 | 写入 |
|---|---|---|---|
| TTF | .ttf | ✓ | — |
| OTF | .otf | ✓ | — |
| EOT | .eot | ✓ | — |
| CFF | .cff | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
| WOFF | .woff | ✓ | — |
| WOFF2 | .woff2 | ✓ | — |
所有格式均通过 FontLoader.open 加载。TTF/OTF 字体返回一个 TtfFont 实例。
开源与许可
Aspose.Font FOSS for Python 在 MIT 许可证下发布。您可以在个人、商业和开源项目中免费使用。源代码可在 GitHub 获取,软件包通过 PyPI 分发,形式为 aspose-font。