Основне керування шрифтами

Основне керування шрифтами

Основне керування шрифтами

У цьому посібнику показано, як завантажувати шрифти за шляхами до файлів або масивами байтів, читати властивості метаданих, відображати 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 отримує об’єкти гліфів за ідентифікатором, 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)Отримати гліф за ідентифікатором
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)Високорівневий допоміжний інструмент, що обгортає запити осей і інстанцій

Дивіться також

 Українська