Вступ
TrueType шрифти (.ttf) та їх OpenType надмножина (.otf) є домінуючими форматами шрифтів у сучасних операційних системах. Обидва формати ділять одну й ту ж двійкову структуру таблиць, засновану на специфікації OpenType. Aspose.Font FOSS для Python розкриває цю структуру через TtfFont, надаючи прямий доступ до окремих таблиць OpenType, даних пар кернінгу, осей змінних шрифтів та контурів гліфів.
Клас TtfFont розширює базовий клас Font методами, специфічними для TTF, включаючи get_blob, get_table_bytes, set_table_bytes та instantiate для блокування осей змінних шрифтів. Властивість TtfTableSet (ttf_tables) забезпечує типізований доступ до найпоширеніших таблиць OpenType: head, hhea, maxp, os2, name, post.
Бібліотека опублікована на PyPI як aspose-font і ліцензована під ліцензією MIT. Вона не має обов’язкових комерційних залежностей.
Ключові можливості
Завантаження шрифтів TTF та OTF
Використовуйте FontLoader.open для завантаження будь-якого файлу шрифту TrueType або OpenType:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
print(loaded.font_name)
print(loaded.font_family)
print(loaded.font_style)
print(loaded.num_glyphs)
FontLoader.open визначає формат шрифту за заголовком файлу. Підтримуються як .ttf (TrueType), так і .otf (OpenType CFF) файли, і обидва повертають екземпляр TtfFont.
Доступ до таблиць OpenType через TtfTableSet
Властивість ttf_tables повертає TtfTableSet з типізованими доступами для загальних таблиць OpenType. Кожна властивість повертає об’єкт таблиці або None, якщо його немає:
Властивість ttf_tables у TtfFont повертає екземпляр TtfTableSet. Доступні доступи до таблиць:
head—HeadTable | Nonehhea—HheaTable | Nonemaxp—MaxpTable | Noneos2—Os2Table | Nonename—NameTable | Nonepost—PostTable | None
Кожна властивість повертає об’єкт таблиці або None, якщо ця таблиця відсутня у файлі шрифту. Доступ до властивостей TtfTableSet, щоб перевірити наявність конкретних таблиць перед їх читанням. Для таблиць, які не охоплюються іменованими доступниками, використовуйте TtfTableSet.get_raw(tag) для отримання необроблених байтів за чотири-символьним тегом OpenType.
Читання необроблених байтів таблиці
get_table_bytes(tag) повертає необроблені байти будь-якої таблиці OpenType. Використовуйте get_blob(tag) для варіанту, безпечного щодо None, який повертає None, коли таблиця відсутня:
TtfFont надає два методи для доступу до необроблених таблиць:
get_table_bytes(tag) -> bytes— повертає необроблені байти іменованої таблиці (викидає виключення, якщо відсутня)get_blob(tag) -> bytes | None— повертаєNone, якщо таблиця відсутня (безпечний варіант)
Обидва методи приймають чотирибуквений OpenType тег таблиці, наприклад "cmap", "GDEF" або "GPOS". Використовуйте get_blob, коли таблиця є необов’язковою, щоб можна було перевірити None перед обробкою.
Пари кернінгу
get_kern_pairs() повертає всі пари кернінгу, закодовані у шрифті. Кожен KernPair має left (GlyphId), right (GlyphId) та value (int у одиницях шрифту):
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
pairs = loaded.get_kern_pairs()
print(f"Kern pairs: {len(pairs)}")
for pair in pairs[:5]:
print(f" Left: {pair.left} Right: {pair.right} Value: {pair.value}")
Метрики шрифту
Стандартні метрики доступні через властивість metrics:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
metrics = loaded.metrics
print(f"Units per em : {metrics.units_per_em}")
print(f"Ascender : {metrics.ascender}")
print(f"Descender : {metrics.descender}")
print(f"Line gap : {metrics.line_gap}")
print(f"Underline pos : {metrics.underline_position}")
Підтримка варіативних шрифтів
Для варіативних шрифтів TtfFont надає is_variable, variable_axes та named_instances. Використовуйте get_axis(tag), щоб отримати конкретну вісь за її чотирибуквеним тегом:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/RobotoFlex.ttf")
print(f"Is variable: {loaded.is_variable}")
print(f"Axes : {len(loaded.variable_axes)}")
Метод get_axis(tag) у TtfFont отримує VariableAxis за його чотирибуквеним тегом (наприклад, "wght" для ваги, "wdth" для ширини). Він повертає None, якщо вісь відсутня в таблиці fvar шрифту.
Перетворення шрифтів
to_bytes(font_type) перетворює шрифт у інший формат. Використайте перелік FontType для вказання цілі:
from aspose_font import FontLoader, FontType
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
ttf_bytes = loaded.to_bytes(FontType.TTF)
with open("output/Roboto-copy.ttf", "wb") as fh:
fh.write(ttf_bytes)
print(f"Serialized: {len(ttf_bytes)} bytes")
Швидкий старт
Встановіть бібліотеку:
.venv/bin/pip install aspose-font
Завантажте шрифт TTF і проаналізуйте його:
from aspose_font import FontLoader, FontType
loaded = FontLoader.open("Roboto-Regular.ttf")
print(f"Font name : {loaded.font_name}")
print(f"Family : {loaded.font_family}")
print(f"Glyphs : {loaded.num_glyphs}")
print(f"Variable : {loaded.is_variable}")
metrics = loaded.metrics
print(f"UPM : {metrics.units_per_em}")
ttf_bytes = loaded.to_bytes(FontType.TTF)
print(f"Serialized: {len(ttf_bytes)} bytes")
Підтримувані формати
| Формат | Розширення | Читати | Запис |
|---|---|---|---|
| TTF | .ttf | ✓ | — |
| OTF | .otf | ✓ | — |
| EOT | .eot | ✓ | — |
| CFF | .cff | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
| WOFF | .woff | ✓ | — |
| WOFF2 | .woff2 | ✓ | — |
Всі формати завантажуються через FontLoader.open. Шрифти TTF/OTF повертають екземпляр TtfFont.
Відкритий код та ліцензування
Aspose.Font FOSS для Python випущено під ліцензією MIT. Ви можете використовувати його у особистих, комерційних та відкритих проектах безкоштовно. Вихідний код доступний на GitHub, а пакет розповсюджується через PyPI як aspose-font.