如何在 Python 中使用 WOFF 字体
本指南展示了如何使用 Aspose.Font FOSS 为 Python 加载、检查和转换 WOFF 和 WOFF2 网络字体。WOFF(Web Open Font Format)是网页上交付字体的标准。WOFF 1 使用 zlib 压缩,WOFF 2 使用 Brotli 压缩,两者都包装了底层的 TrueType 或 CFF 字体。Aspose.Font FOSS 能加载这两种格式,并通过简洁的 API 暴露内部字体数据。
分步指南
步骤 1:安装包
使用以下命令安装 Aspose.Font FOSS 包:
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .步骤 2:导入所需类
导入 FontLoader、FontConverter 和 FontType 以加载和转换 WOFF 字体:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType步骤 3:加载并检查 WOFF 字体
使用 FontLoader.open() 加载 WOFF 文件,并读取诸如名称、系列和字形计数等基本属性:
from aspose_font import FontLoader
woff_font = FontLoader.open("MyFont.woff")
print(f"Name: {woff_font.font_name}")
print(f"Family: {woff_font.font_family}")
print(f"Glyphs: {woff_font.num_glyphs}")
print(f"Type: {woff_font.font_type}")步骤 4:读取 WOFF 元数据
WOFF 文件可能包含一个 XML 元数据块,其中包括许可、致谢和描述。可通过 metadata_xml 属性访问它。
from aspose_font import FontLoader
font = FontLoader.open("MyFont.woff")
# WOFF fonts may include an XML metadata block
xml = getattr(font, "metadata_xml", None)
if xml:
print(xml)
else:
print("No metadata in this WOFF file")步骤 5:访问内部 TTF 表
WoffFont 和 Woff2Font 都公开了一个 inner_font 属性,提供底层的 TtfFont。通过它可以访问所有标准的 OpenType 表。
from aspose_font import FontLoader
font = FontLoader.open("MyFont.woff")
# WOFF wraps a TrueType font; access its tables via inner_font
inner = getattr(font, "inner_font")
tables = inner.ttf_tables
print(f"Units/em: {tables.head.units_per_em}")
print(f"Family name: {tables.name.best_name(1)}")步骤 6:将 TTF 转换为 WOFF
加载 TTF 字体并通过将 FontType.WOFF 传递给 FontConverter.convert() 来转换为 WOFF 格式:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
ttf_font = FontLoader.open("MyFont.ttf")
woff_font = FontConverter.convert(ttf_font, FontType.WOFF)
woff_bytes = woff_font.to_bytes()
from pathlib import Path
Path("MyFont.woff").write_bytes(woff_bytes)步骤 7:将 TTF 转换为 WOFF2
加载 TTF 字体并通过将 FontType.WOFF2 传递给 FontConverter.convert() 来转换为 WOFF2 格式:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
ttf_font = FontLoader.open("MyFont.ttf")
woff2_font = FontConverter.convert(ttf_font, FontType.WOFF2)
woff2_bytes = woff2_font.to_bytes()
from pathlib import Path
Path("MyFont.woff2").write_bytes(woff2_bytes)步骤 8:在 WOFF 与 WOFF2 之间转换
通过将目标 FontType 传递给 FontConverter.convert(),将已加载的 WOFF 文件转换为 WOFF2(或反向转换):
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
# WOFF -> WOFF2
woff_font = FontLoader.open("MyFont.woff")
woff2_font = FontConverter.convert(woff_font, FontType.WOFF2)
# WOFF2 -> WOFF
woff2_font = FontLoader.open("MyFont.woff2")
woff_font = FontConverter.convert(woff2_font, FontType.WOFF)常见问题及解决方案
FontParseException: Invalid WOFF signature — 文件不是有效的 WOFF 字体。请确认文件未损坏且以 WOFF 魔术字节开头。
FontParseException: WOFF table decompression failed — WOFF 文件内部的压缩表已损坏。请尝试重新下载字体文件。
WOFF2 输出体积大 — WOFF2 使用 Brotli 压缩,它生成的文件比 WOFF 1(zlib)更小。如果你的 WOFF2 输出意外地很大,请确保使用的是已优化的 TTF 源文件。
常见问题
WOFF 与 WOFF2 有何区别?
WOFF 1 使用 zlib 压缩,WOFF 2 使用 Brotli 压缩。WOFF2 通常比 WOFF 1 提高 20-30% 的压缩率。两者都包装相同的底层 TrueType 或 CFF 字体数据。
我可以从 WOFF 文件中访问字体表吗?
是的。使用 inner_font 属性获取底层的 TtfFont,然后通过 inner_font.ttf_tables 访问表。
该库是否支持 WOFF 元数据?
是的。WoffFont 和 Woff2Font 都公开一个 metadata_xml 属性,其中包含可选的 XML 元数据块。