Hoe Aspose.Font Brotli-compressie gebruikt voor WOFF2 in Python
WOFF2 (Web Open Font Format 2) comprimeert zijn glyph-data met Brotli, een algemeen doelgerichte verliesloze compressie-algoritme ontwikkeld door Google. Aspose.Font FOSS voor Python verwerkt alle Brotli-bewerkingen intern — u hoeft geen externe compressiebibliotheek te installeren. De meegeleverde BrotliEncoder- en BrotliDecoder-klassen zijn beschikbaar voor laag-niveau gebruik wanneer u willekeurige data moet comprimeren of decomprimeren buiten het standaard WOFF2-conversiepad.
Stapsgewijze handleiding
Stap 1: Installeer het pakket
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .Stap 2: Importeer vereiste klassen
Voor standaard WOFF2-bewerkingen:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontTypeVoor low-level Brotli-bewerkingen (interne API — kan tussen releases veranderen):
from aspose_font._brotli import BrotliEncoder, BrotliDecoder # internal APIStap 3: Maak een WOFF2-lettertype (Brotli-gecomprimeerd)
De standaardprocedure: converteer elk lettertype naar WOFF2. Brotli-compressie wordt automatisch toegepast.
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")Er zijn geen extra stappen nodig voor compressie. De bibliotheek roept BrotliEncoder intern aan bij het produceren van WOFF2-uitvoer.
Stap 4: Laad en verifieer een WOFF2-lettertype
Bij het laden van een .woff2-bestand decompresseert de bibliotheek automatisch de Brotli-gecomprimeerde glyph-gegevens voordat de lettereigenschappen worden blootgesteld:
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 detecteert de WOFF2-magicbytes en roept BrotliDecoder aan om de glyph-stroom te decomprimeren voordat de Woff2Font-instantie wordt geconstrueerd.
Stap 5: Low-Level Brotli-codering
Intern API:
BrotliEncoderandBrotliDecoderzijn interne hulpprogramma’s die tussen releases kunnen veranderen. Voor WOFF2-lettertypecompressie, geef de openbare API die in Stappen 3-4 hierboven wordt getoond de voorkeur.
Gebruik BrotliEncoder direct wanneer je willekeurige binaire data moet comprimeren met Brotli. De parameter quality (0–11) bepaalt het compressieniveau:
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%}")Kwaliteit 11 levert de beste compressieverhouding, ten koste van de coderingssnelheid. Kwaliteit 0 is het snelst. Voor lettertypegegevens in WOFF2-uitvoer gebruikt de bibliotheek het standaardkwaliteitsniveau.
Stap 6: Low-Level Brotli-decodering
Gebruik BrotliDecoder.decode om Brotli-gecomprimeerde data te decomprimeren:
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 is een klassemethode die de gecomprimeerde bytes neemt en de gedecomprimeerde bytes retourneert. Er is geen streaming API — de volledige gecomprimeerde payload moet in één oproep worden geleverd.
Wanneer Low-Level Brotli-API’s te gebruiken
De BrotliEncoder en BrotliDecoder klassen zijn nuttig wanneer:
- U moet willekeurige binaire payloads comprimeren of decomprimeren, onafhankelijk van fontverwerking (bijvoorbeeld het comprimeren van fontmetadata of aangepaste datablocks).
- U moet vooraf valideren dat een Brotli-gecomprimeerde payload correct gevormd is voordat u deze aan een WOFF2-parser doorgeeft.
- U bouwt een testfixture die data met een bekende compressieverhouding vereist.
Voor alle standaard fontbewerkingen (laden, converteren, opslaan van WOFF2) heeft u de low-level API niet nodig — FontLoader.open en FontConverter.convert verwerken Brotli transparant.
Veelgestelde vragen
Vereist de bibliotheek een extern brotli-pakket?
Nee. Aspose.Font FOSS voor Python bevat zijn eigen Brotli-implementatie. Geen brotli, brotlicffi of soortgelijk pakket is vereist.
Welke compressiekwaliteit gebruikt de bibliotheek voor WOFF2?
De bibliotheek gebruikt het standaardkwaliteitsniveau voor WOFF2-uitvoer. Om het kwaliteitsniveau voor aangepaste compressietaken te regelen, gebruik BrotliEncoder(quality=N) waarbij N tussen 0 (snelst) en 11 (beste compressie) ligt.
Kan ik een WOFF2-glyfstream direct decomprimeren?
WOFF2-glyfdata maakt gebruik van een combinatie van Brotli-decompressie en een fontspecifieke transformatie (het “transformed” tabelformaat). Het alleen decompressen van de ruwe Brotli-stream is niet voldoende om een bruikbaar lettertype te herstellen — je moet het WOFF2-bestand laden via FontLoader.open, die zowel de Brotli-decompressie als de inverse tabeltransformatie toepast.