Як Aspose.Font використовує Brotli Compression для WOFF2 в Python

Як Aspose.Font використовує Brotli Compression для WOFF2 в Python

WOFF2 (Web Open Font Format 2) стислює свої дані з використанням Brotli, загальнопризначного форматирувача. беззатратний алгоритм стиснення, розроблений Google. Aspose.Font FOSS для Python ручки всі операції Brotli внутрішньо не потрібно встановлювати ніякого зовнішнього стиснення бібліотека. BrotliEncoder і BrotliDecoder класи доступні для: використання на низькому рівні, коли потрібно стискати або розстисовувати довільні дані за межами системи. стандартний шлях конверсії WOFF2.

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

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

pip install "aspose-font>=1.0.0"

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

Для стандартних операцій WOFF2:

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

Для операцій Brotli низького рівня (внутрішній API може змінюватися між випусками):

from aspose_font._brotli import BrotliEncoder, BrotliDecoder  # internal API

Крок 3: Створення шрифту WOFF2 (Бротлі-компресований)

Стандартний шлях: конвертувати будь-який шрифт в WOFF2.

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

# Load a TTF or WOFF source
source = FontLoader.open("MyFont.ttf")

# Convert to WOFF2 — Brotli compression is applied internally
woff2 = FontConverter.convert(source, FontType.WOFF2)
output_bytes = woff2.to_bytes(FontType.WOFF2)

Path("MyFont.woff2").write_bytes(output_bytes)
print(f"WOFF2 size: {len(output_bytes)} bytes")

Для компресії не потрібні додаткові кроки. BrotliEncoder внутрішньо при виробництві WOFF2.

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

При завантаженні .woff2 файл, бібліотека розкомпресовує сціплений гліф Бротлі. дані автоматично перед викладенням властивостей шрифту:

from aspose_font.loader import FontLoader

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

FontLoader.open виявляє магічні байти WOFF2 і викликає: BrotliDecoder до розкомпресувати потік гліфа перед побудовою Woff2Font Наприклад.

Крок 5: Кодування Brotli низького рівня

Внутрішній API: КороткоBrotliEncoder і BrotliDecoder є внутрішньою комунальною компанією. Для компресії шрифтів WOFF2 краще використовувати формат “Wow” (англ. публічний API, показаний у кроках 3-4 вище.

Використання BrotliEncoder безпосередньо, коли вам потрібно стиснути довільні двоякі дані з Бротлі. quality параметр (011) контролює рівень стиснення:

from aspose_font._brotli import BrotliEncoder  # internal API

data = b"Hello, Brotli!" * 100  # Sample data to compress

encoder = BrotliEncoder(quality=11)  # quality 11 = maximum compression
compressed = encoder.encode(data)

print(f"Original : {len(data)} bytes")
print(f"Compressed: {len(compressed)} bytes")
print(f"Ratio    : {len(compressed)/len(data):.2%}")

Для даних шрифту в виході WOFF2 бібліотека використовує стандартний рівень якості.

Крок 6: Декодування Brotli низького рівня

Використання BrotliDecoder.decode для розкомпресії даних, стислених Brotli:

from aspose_font._brotli import BrotliEncoder, BrotliDecoder  # internal API

original = b"Hello, Brotli!" * 100

# Compress
encoder = BrotliEncoder(quality=6)
compressed = encoder.encode(original)

# Decompress
decoded = BrotliDecoder.decode(compressed)

assert decoded == original
print(f"Decoded {len(decoded)} bytes — matches original: {decoded == original}")

BrotliDecoder.decode є методом класу, який бере стиснені байти і Відвертає декомпресовані байти. Немає потокового API повний стиснений корисний заряд повинен бути наданий в один виклик.

Коли використовувати API Brotli низького рівня

У. BrotliEncoder і BrotliDecoder класи корисні, коли:

  • Вам потрібно стискати або розстисовувати довільні двоякі корисні навантаження незалежно від обробки шрифтів (наприклад, стиснення метаданих шрифта чи персоналізованих блоків даних).
  • Ви повинні попередньо підтвердити, що Brotli-компресований корисний навантаження добре сформоване перед передачею його в WOFF2 аналізатор.
  • Ви будуєте випробувальний прилад, який вимагає відомої інформації про співвідношення стиснення.

Для всіх стандартних операцій шрифту (завантаження, перетворення, збереження WOFF2), ви не повинні: потрібен API низького рівня FontLoader.open і FontConverter.convert ручка Бротлі прозоро.

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

Чи потребує бібліотека зовнішнього пакету братолі?

Ні. Aspose.Font FOSS для Python об’єднує власну реалізацію Brotli. brotli, brotlicffi, або аналогічна упаковка.

Яка якість стиснення використовується бібліотекою для WOFF2?

Бібліотека використовує стандартний рівень якості для виходу WOFF2. Для контролю рівень якості для персоналізованих компресій, використання BrotliEncoder(quality=N) де: N між 0 (найшвидше) і 11 (краще з компресії).

Чи можу я розкомпресувати потік гліфа WOFF2 безпосередньо?

Дані з глифа WOFF2 використовують комбінацію декомпресії Бротлі та специфічний для шрифту. Transform (формату “трансформованої” таблиці). Декомпресія непереробленого потоку Бротлі Одинокого не вистачає для відновлення корисних шрифтів Ви повинні завантажити файл WOFF2 через FontLoader.open, що застосовує як Brotli декомпресія, так і інверсивний трансформатор таблиці.

See Also

 Українська