Основное управление шрифтами

Основное управление шрифтами

Основное управление шрифтами

Это руководство показывает, как загружать шрифты из файловых путей или массивов байтов, читать свойства метаданных, сопоставлять кодовые точки Unicode идентификаторам глифов, получать глифы и работать с осями переменных шрифтов и именованными экземплярами.

FontLoader является основным входным пунктом для всех операций загрузки шрифтов. После загрузки шрифта базовый класс Font предоставляет доступ к метаданным, кодировке, доступу к глифам и метрикам без необходимости парсинга бинарных таблиц.


Загрузка шрифтов

FontLoader.open(source, font_type, collection_index) загружает шрифт из файлового пути с автоматическим определением формата. FontLoader.load(source, font_type, collection_index) принимает необработанные байты для потоков работы в памяти или по сети.

from aspose_font import FontLoader

# From a file path — format auto-detected
font = FontLoader.open("Roboto-Regular.ttf")

# From raw bytes — useful for in-memory or network workflows
with open("OpenSans-Regular.otf", "rb") as f:
    font = FontLoader.load(f.read())

Чтение метаданных шрифта

После загрузки объект Font раскрывает свойства font_name, font_family, font_style и num_glyphs для быстрого просмотра без ручного парсинга таблиц.

from aspose_font import FontLoader

font = FontLoader.open("MyFont.ttf")
print(font.font_name)    # full PostScript name
print(font.font_family)  # family name
print(font.font_style)   # style name e.g. "Regular", "Bold"
print(font.num_glyphs)   # total glyph count

Кодировка глифов

FontEncoding сопоставляет кодовые точки Unicode идентификаторам глифов. Используйте unicode_to_gid(cp) для разрешения отдельной кодовой точки или get_all_codepoints() для перечисления всех сопоставленных кодовых точек в шрифте.

from aspose_font import FontLoader

font = FontLoader.open("OpenSans-Regular.otf")

# Map a single code point
gid = font.encoding.unicode_to_gid(0x41)  # GID for 'A'

# Enumerate all mapped code points
all_cps = font.encoding.get_all_codepoints()
print(f"Font covers {len(all_cps)} Unicode code points")

Доступ к глифам

GlyphAccessor извлекает объекты глифов по ID, Unicode или текстовой строке.

from aspose_font import FontLoader

font = FontLoader.open("OpenSans-Regular.otf")

glyph = font.glyph_accessor.get_glyph_by_id(gid)
glyph_a = font.glyph_accessor.get_glyph_by_unicode(0x41)
glyphs = font.glyph_accessor.get_glyphs_for_text("Hello")
all_ids = font.glyph_accessor.get_all_glyph_ids()

Переменные шрифты

Для переменных шрифтов (содержащих таблицу fvar) TtfFont напрямую предоставляет определения осей и именованные экземпляры.

from aspose_font import FontLoader
from aspose_font import TtfFont

loaded = FontLoader.load("Roboto-VariableFont_wdth,wght.ttf")
ttf: TtfFont = loaded.font

# Check if the font is variable
if ttf.is_variable:
    # List all variation axes
    for axis in ttf.variable_axes:
        print(f"{axis.tag}  range: {axis.min_value}..{axis.max_value}  default: {axis.default_value}")

    # Look up a single axis by tag
    wght = ttf.get_axis("wght")
    if wght:
        print(f"Weight axis: {wght.min_value}..{wght.max_value}")

    # Enumerate named instances (e.g. Bold, Condensed)
    for inst in ttf.named_instances:
        print(f"Instance: name_id={inst.name_id}  coordinates={inst.coordinates}")

Для более высокоуровневых рабочих процессов инстанцирования SmartInstancer объединяет перечисление осей и разрешение именованных экземпляров в один объект:

from aspose_font import FontLoader
from aspose_font import SmartInstancer

loaded = FontLoader.load("Roboto-VariableFont_wdth,wght.ttf")
instancer = SmartInstancer(loaded.font)

print(f"Axes: {[a.tag for a in instancer.axes]}")
print(f"Named instances: {len(instancer.named_instances)}")

Советы и лучшие практики

  • Кешировать загруженные объекты Font при многократной обработке одного и того же файла шрифта
  • Используйте FontLoader.load(bytes) для сетевых или баз данных рабочих процессов, чтобы избежать временных файлов
  • Проверьте num_glyphs перед выделением подмножества, чтобы оценить покрытие после субсета
  • get_all_glyph_ids() полезен для перебора полного набора глифов

Типичные проблемы

ПроблемаПричинаИсправление
UnsupportedFontFormatExceptionФормат файла не распознанУбедитесь, что файл является действительным TTF/OTF/CFF/WOFF/WOFF2/EOT/Type1
FontParseExceptionНекорректные двоичные данныеПроверьте файл шрифта с помощью линтера перед загрузкой
GlyphNotFoundExceptionGID за пределами диапазонаПроверьте num_glyphs перед доступом по ID

FAQ

Поддерживает ли FontLoader WOFF2?

Да. FontLoader.open() и FontLoader.load() оба принимают файлы WOFF2 и автоматически определяют формат.

Могу ли я загрузить шрифт по URL?

Не напрямую. Скачайте байты шрифта с помощью urllib или requests и передайте их в FontLoader.load(bytes).

Является ли загрузка потокобезопасной?

Каждый вызов FontLoader.open() возвращает независимый объект Font. Параллельные вызовы на разных объектах безопасны.


API Reference Сводка

Класс / МетодОписание:
FontLoader.open(path)Загрузить шрифт из пути к файлу
FontLoader.load(data)Загрузить шрифт из сырых байтов
Font.font_nameПолное название шрифта PostScript
Font.font_familyИмя семейства шрифтов
Font.font_styleИмя стиля шрифта
Font.num_glyphsОбщее количество глифов
FontEncoding.unicode_to_gid(cp)Сопоставить кодовую точку Unicode с идентификатором глифа
FontEncoding.get_all_codepoints()Все кодовые точки Unicode с сопоставлениями глифов
GlyphAccessor.get_glyph_by_id(gid)Получить глиф по ID
GlyphAccessor.get_glyph_by_unicode(cp)Получить глиф по кодовой точке Unicode
GlyphAccessor.get_glyphs_for_text(text)Получить глифы для текстовой строки
GlyphAccessor.get_all_glyph_ids()Перечислить все ID глифов в шрифте
TtfFont.is_variableСодержит ли шрифт данные переменного шрифта
TtfFont.variable_axesСписок объектов VariableAxis для каждой оси вариаций
TtfFont.get_axis(tag)Найдите отдельную ось по её четырёхсимвольному тегу
TtfFont.named_instancesИменованные экземпляры, определённые в таблице fvar шрифта
SmartInstancer(font)Высокоуровневый помощник, оборачивающий запросы осей и экземпляров

См. также:

 Русский