Работа с TrueType шрифтами
Работа с шрифтами TrueType
Это руководство показывает, как загружать шрифты TrueType, исследовать их бинарные данные таблиц, считывать необработанные байты таблиц и создавать статические экземпляры из переменных шрифтов с помощью TtfInstancer.
TrueType (TTF) шрифты являются самым распространённым форматом настольных и веб-шрифтов. Aspose.Font FOSS для Python предоставляет TtfFont для доступа к данным таблиц, специфичным для TTF, получению блобов глифов и управлению осями переменных шрифтов.
Загрузка TTF-шрифта
FontLoader.open() автоматически определяет формат TTF и возвращает объект типа TtfFont. Возвращённый экземпляр предоставляет доступ к функциям, специфичным для TTF, таким как ttf_tables, get_table_bytes() и данные осей переменных шрифтов.
from aspose_font import FontLoader
font = FontLoader.open("Roboto-Regular.ttf")
print(font.font_name, font.num_glyphs, "glyphs")Доступ к таблицам TTF
TtfFont.ttf_tables предоставляет TtfTableSet с именованными свойствами для общих таблиц.
from aspose_font import FontLoader
from aspose_font import TtfFont
ttf_font: TtfFont = FontLoader.open("Roboto-Regular.ttf")
tables = ttf_font.ttf_tables
print("kern table present:", tables.kern is not None)Сырые байты таблицы
Используйте TtfFont.get_table_bytes(tag) для получения необработанных двоичных данных таблицы и TtfFont.set_table_bytes(tag, data) для записи изменённых байтов таблицы.
from aspose_font import FontLoader
from aspose_font import TtfFont
ttf_font: TtfFont = FontLoader.open("Roboto-Regular.ttf")
raw_cmap = ttf_font.get_table_bytes("cmap")Экземпляры переменных шрифтов
TtfFont.get_axis(tag) возвращает одну переменную ось по её 4-символьному тегу (например, "wght", "wdth"), или None, если шрифт не определяет эту ось. TtfInstancer.instantiate() создаёт статический экземпляр из переменного шрифта с указанными координатами осей.
from aspose_font import FontLoader
from aspose_font import TtfFont
from aspose_font.ttf.instancer import TtfInstancer # internal API — may change between releases
ttf_font: TtfFont = FontLoader.open("Roboto-VariableFont_wdth,wght.ttf")
weight_axis = ttf_font.get_axis("wght")
if weight_axis is not None:
print(f"wght range: {weight_axis.min_value}-{weight_axis.max_value}")
# Get a static instance at wght=700, wdth=75
instance = TtfInstancer.instantiate(ttf_font, {"wght": 700.0, "wdth": 75.0})Советы и лучшие практики
- Всегда используйте
isinstance(font, TtfFont)перед доступом кttf_tablesилиget_table_bytes() - Используйте
TtfTableSet.kernдля проверки наличия кернинга перед чтением пар кернинга - Создание экземпляра переменного шрифта создаёт новый объект шрифта; оригинал остаётся неизменным
API Reference Сводка
| Класс / Метод | Описание: |
|---|---|
TtfFont.ttf_tables | Доступ к набору таблиц TTF |
TtfFont.get_table_bytes(tag) | Необработанные байты именованной таблицы |
TtfFont.set_table_bytes(tag, data) | Записать изменённые байты таблицы |
TtfFont.get_axis(tag) | Переменная ось шрифта по тегу, или None |
TtfInstancer.instantiate(font, coords) | Создать статический экземпляр |
TtfTableSet.kern | Таблица кернинга (None, если отсутствует) |