Работа с TrueType шрифтами

Работа с 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, если отсутствует)

См. также:

 Русский