Hur Aspose.Font Använder Brotli-komprimering för WOFF2 i Python

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 FontType

För låg-nivå Brotli-operationer (internt API — kan förändras mellan versioner):

from aspose_font._brotli import BrotliEncoder, BrotliDecoder  # internal API

Steg 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: BrotliEncoder and BrotliDecoder ä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.

Se även

 Svenska