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 FontTypeDo niskopoziomowych operacji Brotli (wewnętrzne API — może się zmieniać między wersjami):
from aspose_font._brotli import BrotliEncoder, BrotliDecoder # internal APIKrok 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:
BrotliEncoderandBrotliDecodersą 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.