Hur Aspose.Font Använder Brotli-komprimering för WOFF2 i Python
WOFF2 (Web Open Font Format 2) komprimerar sina glyfdata med Brotli, en allmän förlustfri komprimeringsalgoritm utvecklad av Google. Aspose.Font FOSS för Python hanterar alla Brotli-operationer internt — du behöver inte installera något externt komprimeringsbibliotek. De medföljande BrotliEncoder- och BrotliDecoder-klasserna är tillgängliga för låg-nivå-användning när du behöver komprimera eller dekomprimera godtycklig data utanför den standardiserade WOFF2-konverteringsvägen.
Steg-för-steg-guide
Steg 1: Installera paketet
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .Steg 2: Importera nödvändiga klasser
För standard WOFF2-operationer:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontTypeFör låg-nivå Brotli-operationer (internt API — kan förändras mellan versioner):
from aspose_font._brotli import BrotliEncoder, BrotliDecoder # internal APISteg 3: Skapa ett WOFF2-teckensnitt (Brotli-komprimerat)
Standardvägen: konvertera vilket teckensnitt som helst till WOFF2. Brotli-komprimering tillämpas automatiskt.
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")Inga ytterligare steg behövs för komprimering. Biblioteket anropar BrotliEncoder internt när det producerar WOFF2-utdata.
Steg 4: Ladda och verifiera ett WOFF2-teckensnitt
När ett .woff2-fil laddas, dekomprimerar biblioteket den Brotli-komprimerade glyfdatan automatiskt innan det exponerar teckensnittsegenskaperna:
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 upptäcker WOFF2-magiska bytes och anropar BrotliDecoder för att dekomprimera glyfflödet innan Woff2Font-instansen konstrueras.
Steg 5: Låg-nivå Brotli-kodning
Intern API:
BrotliEncoderandBrotliDecoderär interna verktyg som kan förändras mellan versioner. För WOFF2-teckensnittskomprimering, föredra den offentliga API som visas i steg 3-4 ovan.
Använd BrotliEncoder direkt när du behöver komprimera godtycklig binär data med Brotli. Parametern quality (0–11) styr komprimeringsnivån:
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%}")Kvalitet 11 ger det bästa komprimeringsförhållandet på bekostnad av kodningshastigheten. Kvalitet 0 är snabbast. För typsnittsdatan i WOFF2-utdata använder biblioteket standardkvalitetsnivån.
Steg 6: Lågnivå Brotli-avkodning
Använd BrotliDecoder.decode för att dekomprimera Brotli-komprimerad data:
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 är en klassmetod som tar de komprimerade bytena och returnerar de dekomprimerade bytena. Det finns ingen strömmande API — hela den komprimerade nyttolasten måste tillhandahållas i ett enda anrop.
När man ska använda lågnivå Brotli-API:er
Klasserna BrotliEncoder och BrotliDecoder är användbara när:
- Du behöver komprimera eller dekomprimera godtyckliga binära nyttolaster oberoende av teckensnittsbehandling (till exempel komprimering av teckensnittmetadata eller anpassade datablokkar).
- Du behöver förvalidera att en Brotli-komprimerad nyttolast är korrekt formad innan du skickar den till en WOFF2-parser.
- Du bygger en testfixture som kräver data med känt komprimeringsförhållande.
För alla standardteckensnittsoperationer (laddning, konvertering, sparande av WOFF2) behöver du inte den lågnivå API — FontLoader.open och FontConverter.convert hanterar Brotli transparent.
Vanliga frågor
Kräver biblioteket ett externt brotli-paket?
Nej. Aspose.Font FOSS för Python levererar sin egen Brotli-implementation. Inget brotli, brotlicffi eller liknande paket krävs.
Vilken komprimeringskvalitet använder biblioteket för WOFF2?
Biblioteket använder standardkvalitetsnivån för WOFF2-utdata. För att styra kvalitetsnivån för anpassade komprimeringsuppgifter, använd BrotliEncoder(quality=N) där N är mellan 0 (snabbast) och 11 (bästa kompression).
Kan jag dekomprimera en WOFF2-glyfström direkt?
WOFF2-glyfdatan använder en kombination av Brotli-dekomprimering och en typsnittsspecifik transform (det ”transformerade” tabellformatet). Att bara dekomprimera den råa Brotli-strömmen räcker inte för att återställa ett användbart typsnitt — du måste läsa in WOFF2-filen via FontLoader.open, som tillämpar både Brotli-dekomprimeringen och den omvända tabelltransformen.