Hoe Aspose.Font Brotli-compressie gebruikt voor WOFF2 in Python

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 FontType

Voor low-level Brotli-bewerkingen (interne API — kan tussen releases veranderen):

from aspose_font._brotli import BrotliEncoder, BrotliDecoder  # internal API

Stap 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: BrotliEncoder and BrotliDecoder zijn 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.

Zie ook

 Nederlands