Jak Aspose.Font používá kompresi Brotli pro WOFF2 v Python

Jak Aspose.Font používá kompresi Brotli pro WOFF2 v Python

WOFF2 (Web Open Font Format 2) komprimuje svá data glyfů pomocí Brotli, obecného bezztrátového kompresního algoritmu vyvinutého společností Google. Aspose.Font FOSS pro Python zpracovává všechny operace Brotli interně — není nutné instalovat žádnou externí kompresní knihovnu. Dodané třídy BrotliEncoder a BrotliDecoder jsou k dispozici pro nízkoúrovňové použití, když potřebujete komprimovat nebo dekomprimovat libovolná data mimo standardní konverzní cestu WOFF2.

Průvodce krok za krokem

Krok 1: Nainstalujte balíček

git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .

Krok 2: Importujte požadované třídy

Pro standardní operace WOFF2:

from aspose_font import FontLoader
from aspose_font.converter import FontConverter  # internal API — may change between releases
from aspose_font import FontType

Pro nízkoúrovňové operace Brotli (interní API — může se měnit mezi vydáními):

from aspose_font._brotli import BrotliEncoder, BrotliDecoder  # internal API

Krok 3: Vytvořit font WOFF2 (komprimovaný Brotli)

Standardní cesta: převést libovolný font na WOFF2. Komprese Brotli se použije automaticky.

from aspose_font import FontLoader
from aspose_font.converter import FontConverter  # internal API — may change between releases
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")

Pro kompresi nejsou potřeba žádné další kroky. Knihovna volá interně BrotliEncoder při vytváření výstupu WOFF2.

Krok 4: Načíst a ověřit font WOFF2

Při načítání souboru .woff2 knihovna automaticky dekomprimuje data glyfů komprimovaná Brotli, než zpřístupní vlastnosti fontu:

from aspose_font 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 detekuje magické bajty WOFF2 a vyvolá BrotliDecoder k dekompresi proudu glyfů před vytvořením instance Woff2Font.

Krok 5: Nízkourovňové kódování Brotli

Interní API: BrotliEncoder and BrotliDecoder jsou interní utility, které se mohou mezi vydáními měnit. Pro kompresi fontů WOFF2 upřednostněte veřejný API uvedený v krocích 3-4 výše.

Použijte BrotliEncoder přímo, když potřebujete komprimovat libovolná binární data pomocí Brotli. Parametr quality (0–11) řídí úroveň komprese:

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%}")

Kvalita 11 poskytuje nejlepší kompresní poměr, ale na úkor rychlosti kódování. Kvalita 0 je nejrychlejší. Pro data fontů ve výstupu WOFF2 knihovna používá výchozí úroveň kvality.

Krok 6: Nízkourovňové dekódování Brotli

Použijte BrotliDecoder.decode k dekompresi dat komprimovaných pomocí 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 je metoda třídy, která přijímá komprimované bajty a vrací dekomprimované bajty. Neexistuje streamovací API — celý komprimovaný payload musí být poskytnut v jednom volání.

Kdy použít nízkourovňové API Brotli

Třídy BrotliEncoder a BrotliDecoder jsou užitečné, když:

  • Potřebujete komprimovat nebo dekomprimovat libovolné binární náklady nezávisle na zpracování fontů (například komprimovat metadata fontu nebo vlastní datové bloky).
  • Potřebujete předem ověřit, že Brotli-komprimovaný náklad je správně vytvořený, než jej předáte parseru WOFF2.
  • Vytváříte testovací zařízení, které vyžaduje data se známým kompresním poměrem.

Pro všechny standardní operace s fonty (načítání, konverze, ukládání WOFF2) nepotřebujete nízkoúrovňový API — FontLoader.open a FontConverter.convert zpracovávají Brotli transparentně.

Často kladené otázky

Vyžaduje knihovna externí balíček brotli?

Ne. Aspose.Font FOSS pro Python obsahuje vlastní implementaci Brotli. Není vyžadován žádný brotli, brotlicffi ani podobný balíček.

Jakou úroveň kompresní kvality knihovna používá pro WOFF2?

Knihovna používá výchozí úroveň kvality pro výstup WOFF2. Pro řízení úrovně kvality při vlastních kompresních úlohách použijte BrotliEncoder(quality=N), kde N je mezi 0 (nejrychlejší) a 11 (nejlepší komprese).

Mohu dekomprimovat proud glyfů WOFF2 přímo?

Data glyfů WOFF2 používají kombinaci dekomprese Brotli a specifické transformace písma (formát tabulky „transformed“). Dekompresí samotného surového proudu Brotli není dostatečná k získání použitelného písma – musíte načíst soubor WOFF2 přes FontLoader.open, který aplikuje jak dekompresi Brotli, tak inverzní tabulkovou transformaci.

Viz také:

 Čeština