Как Aspose.Font использует сжатие Brotli для WOFF2 в Python

Как Aspose.Font использует сжатие Brotli для 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. Сжатие Brotli применяется автоматически.

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 предпочтительнее использовать публичный 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%}")

Качество 11 дает лучшее соотношение сжатия за счет скорости кодирования. Качество 0 является самым быстрым. Для данных шрифта в выходе WOFF2 библиотека использует стандартный уровень качества.

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

Использование: BrotliDecoder.decode для разжигания данных, сжатых методом Бротли:

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 используют комбинацию декомпрессии Бротли и специальный шрифт. преобразовать (формат таблицы “преобразованный”). Декомпресирование непереработанного потока Бротли одного недостаточно для восстановления используемого шрифта вы должны загрузить файл WOFF2 через FontLoader.open, которая применяет как декомпрессию Бротли, так и преобразование обратной таблицы.

See Also

 Русский