Як працювати з шрифтами WOFF в Python

Як працювати з шрифтами WOFF в Python

Це керівництво показує, як завантажувати, оглядати та конвертувати веб-шрифти WOFF і WOff2 з використанням Aspose.Font FOSS для Python. WOF (Web Open Font Format) - стандарт для доставки шрифтів в Інтернеті. ВОФ 1 використовує стиснення zlib, а ВОВ 2 використовують стиск Brotli, обидва обертаючи базовий шрифт TrueType або CFF. ФОС загружує обидві формати і висвітлює внутрішні дані шriftu через чисте API .

Крок за кроком посібник

Крок 1: Налаштування пакету

Інсталювати пакет Aspose.Font FOSS з PyPI за допомогою нижче наведеної команди pip:

pip install "aspose-font>=1.0.0"

Крок 2: Необхідні класи імпорту

Import FontLoader, FontConverter, і FontType завантажити та перетворити шрифти WOFF:

from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontType

Крок 3: Завантажити і перевірити шрифт WOFF

Завантажити файл WOFF з: FontLoader.open() і читати основні властивості, такі як ім’я, родина та число слів:

from aspose_font.loader import FontLoader

woff_font = FontLoader.open("MyFont.woff")
print(f"Name: {woff_font.font_name}")
print(f"Family: {woff_font.font_family}")
print(f"Glyphs: {woff_font.num_glyphs}")
print(f"Type: {woff_font.font_type}")

Крок 4: Читання метаданих WOFF

Файли WOFF можуть містити блок метаданих XML з ліцензією, кредитами та Опис. Доступ через metadata_xml майно.

font = FontLoader.open(“MyFont.woff”)

WOFF fonts may include an XML metadata block

xml = getattr(font, “metadata_xml”, None) if xml: print(xml) else: print(“No metadata in this WOFF file”)


### Крок 5: Доступ до внутрішніх ТТФ-табліць

Both `WoffFont` і `Woff2Font` викривати `inner_font` майно, яке дає Ви підґрунтовані `TtfFont`.Через нього ви можете отримати доступ до всіх стандартних Таблиці OpenType.

font = FontLoader.open("MyFont.woff")
# WOFF wraps a TrueType font; access its tables via inner_font
inner = getattr(font, "inner_font")
tables = inner.ttf_tables

print(f"Units/em: {tables.head.units_per_em}")
print(f"Family name: {tables.name.best_name(1)}")

<button class=“hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50” title=“Скопіювати код”

<div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div>
<div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div>

Крок 6: Ітерація всіх рядків

Завантажити шрифт TTF і перетворити його на формат WOFF, пропускаючи: FontType.WOFF до FontConverter.convert():

ttf_font = FontLoader.open(“MyFont.ttf”) woff_font = FontConverter.convert(ttf_font, FontType.WOFF) woff_bytes = woff_font.to_bytes()

from pathlib import Path Path(“MyFont.woff”).write_bytes(woff_bytes)


### Крок 6: Ітерація всіх рядків

Завантажити шрифт TTF і перетворити його на формат WOFF2 шляхом проходження `FontType.WOFF2` до `FontConverter.convert()`:

ttf_font = FontLoader.open("MyFont.ttf")
woff2_font = FontConverter.convert(ttf_font, FontType.WOFF2)
woff2_bytes = woff2_font.to_bytes()

from pathlib import Path
Path("MyFont.woff2").write_bytes(woff2_bytes)

<button class=“hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50” title=“Скопіювати код”

<div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div>
<div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div>

FAQ про Aspose.Page FOSS для Python ліцензування, відомі обмеження, підтримка формату та загальні питання використання.

Конвертувати завантажений файл WOFF в WOff2 (або навпаки) шляхом проходження цільового FontType до FontConverter.convert():

WOFF -> WOFF2

woff_font = FontLoader.open(“MyFont.woff”) woff2_font = FontConverter.convert(woff_font, FontType.WOFF2)

WOFF2 -> WOFF

woff2_font = FontLoader.open(“MyFont.woff2”) woff_font = FontConverter.convert(woff2_font, FontType.WOFF)

<button class=“hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50” title=“Скопіювати код”

<div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div>
<div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div>

Загальні проблеми та рішення

FontParseException: Invalid WOFF signature Файл не є дійсним WOFF. Перевірте, що файл не пошкоджений і починається з магічних байтів WOFF.

FontParseException: WOFF table decompression failed Скомпресований стіл Постарайтеся перезавантажити файл шрифту.

Великий вихід WOFF2 WOFF2 використовує стиснення Бротлі, що виробляє меншу кількість Якщо ваш вихід WOFF2 неочікувано великий, переконайтеся, що ви не отримаєте файлів на WIFF1 (zlib). Ви починаєте з оптимізованого джерела TTF.

Часто задавані запитання

У чому різниця між WOFF і WOff2?

WOFF 1 використовує стиснення злиб, а WOff 2 - Brotli. WOF2 зазвичай досягає 20-30% кращого стискування ніж WOFC 1. Обидва загорнуті однаковими даними основного шрифту TrueType або CFF .

Чи можу я отримати доступ до таблиць шрифтів з файлу WOFF?

Так, використовуйте… inner_font власність, щоб отримати базовий TtfFont, тоді доступ до таблиць через: inner_font.ttf_tables.

Бібліотека підтримує метадані WOFF?

Так, і обох. WoffFont і Woff2Font викривати metadata_xml майновість містить необхідний блок метаданих XML.

See Also

 Українська