Jak Aspose.Font używa kompresji Brotli dla WOFF2 w Python

Jak Aspose.Font używa kompresji Brotli dla WOFF2 w Python

WOFF2 (Web Open Font Format 2) kompresuje dane glifów przy użyciu Brotli, ogólnego algorytmu bezstratnej kompresji opracowanego przez Google. Aspose.Font FOSS dla Python obsługuje wszystkie operacje Brotli wewnętrznie — nie musisz instalować żadnej zewnętrznej biblioteki kompresji. Dołączone klasy BrotliEncoder i BrotliDecoder są dostępne do użycia na niskim poziomie, gdy potrzebujesz kompresować lub dekompresować dowolne dane poza standardową ścieżką konwersji WOFF2.

Przewodnik krok po kroku

Krok 1: Zainstaluj pakiet

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: Zaimportuj wymagane klasy

Dla standardowych operacji WOFF2:

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

Do niskopoziomowych operacji Brotli (wewnętrzne API — może się zmieniać między wersjami):

from aspose_font._brotli import BrotliEncoder, BrotliDecoder  # internal API

Krok 3: Utwórz czcionkę WOFF2 (skompresowaną Brotli)

Standardowa ścieżka: konwertuj dowolną czcionkę do WOFF2. Kompresja Brotli jest stosowana automatycznie.

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

Nie są potrzebne dodatkowe kroki do kompresji. Biblioteka wywołuje BrotliEncoder wewnętrznie podczas generowania wyjścia WOFF2.

Krok 4: Załaduj i zweryfikuj czcionkę WOFF2

Podczas ładowania pliku .woff2, biblioteka automatycznie dekompresuje dane glifów skompresowane Brotli przed udostępnieniem właściwości czcionki:

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 wykrywa magiczne bajty WOFF2 i wywołuje BrotliDecoder, aby zdekompresować strumień glifów przed utworzeniem instancji Woff2Font.

Krok 5: Niskopoziomowe kodowanie Brotli

Wewnętrzny API: BrotliEncoder and BrotliDecoder są wewnętrznymi narzędziami, które mogą się zmieniać pomiędzy wydaniami. Dla kompresji czcionek WOFF2, preferuj publiczny API pokazany w krokach 3-4 powyżej.

Użyj BrotliEncoder bezpośrednio, gdy potrzebujesz kompresować dowolne dane binarne przy użyciu Brotli. Parametr quality (0–11) kontroluje poziom kompresji:

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

Jakość 11 zapewnia najlepszy współczynnik kompresji kosztem szybkości kodowania. Jakość 0 jest najszybsza. Dla danych czcionek w wyjściu WOFF2 biblioteka używa domyślnego poziomu jakości.

Krok 6: Niskopoziomowe dekodowanie Brotli

Użyj BrotliDecoder.decode do dekompresji danych skompresowanych 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 jest metodą klasy, która przyjmuje skompresowane bajty i zwraca zdekompresowane bajty. Nie ma strumieniowego API — pełny skompresowany ładunek musi być podany w jednym wywołaniu.

Kiedy używać niskopoziomowych interfejsów API Brotli

Klasy BrotliEncoder i BrotliDecoder są przydatne, gdy:

  • Potrzebujesz kompresować lub dekompresować dowolne binarne ładunki niezależnie od przetwarzania czcionek (na przykład kompresując metadane czcionki lub własne bloki danych).
  • Musisz wstępnie zweryfikować, że ładunek skompresowany przy użyciu Brotli jest poprawnie sformatowany, zanim przekażesz go parserowi WOFF2.
  • Tworzysz środowisko testowe, które wymaga danych o znanym współczynniku kompresji.

Do wszystkich standardowych operacji na czcionkach (ładowanie, konwertowanie, zapisywanie WOFF2) nie potrzebujesz niskopoziomowego API — FontLoader.open i FontConverter.convert obsługują Brotli w sposób transparentny.

Najczęściej zadawane pytania

Czy biblioteka wymaga zewnętrznego pakietu brotli?

Nie. Aspose.Font FOSS dla Python zawiera własną implementację Brotli. Nie wymaga się brotli, brotlicffi ani podobnego pakietu.

Jaką jakość kompresji używa biblioteka dla WOFF2?

Biblioteka używa domyślnego poziomu jakości dla wyjścia WOFF2. Aby kontrolować poziom jakości w niestandardowych zadaniach kompresji, użyj BrotliEncoder(quality=N), gdzie N mieści się w przedziale od 0 (najszybszy) do 11 (najlepsza kompresja).

Czy mogę bezpośrednio zdekompresować strumień glifów WOFF2?

Dane glifów WOFF2 używają kombinacji dekompresji Brotli i transformacji specyficznej dla czcionki (format tabeli „transformed”). Samej dekompresji surowego strumienia Brotli nie wystarczy, aby odzyskać użyteczną czcionkę — musisz wczytać plik WOFF2 przez FontLoader.open, które stosuje zarówno dekompresję Brotli, jak i odwrotną transformację tabeli.

Zobacz także

 Polski