Wie Aspose.Font Brotli-Kompression für WOFF2 in Python verwendet
WOFF2 (Web Open Font Format 2) komprimiert seine Glyphendaten mit Brotli, einem universell einsetzbaren verlustfreien Kompressionsalgorithmus, entwickelt von Google. Aspose.Font FOSS für Python erledigt alle Brotli-Operationen intern — Sie müssen keine externe Kompressionsbibliothek installieren. Die mitgelieferten Klassen BrotliEncoder und BrotliDecoder stehen für Low-Level-Verwendungen zur Verfügung, wenn Sie beliebige Daten außerhalb des regulären WOFF2-Konvertierungspfads komprimieren oder dekomprimieren müssen.
Schritt-für-Schritt-Anleitung
Schritt 1: Paket installieren
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .Schritt 2: Erforderliche Klassen importieren
Für Standard-WOFF2-Operationen:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontTypeFür Low-Level-Brotli-Operationen (internes API — kann zwischen Releases variieren):
from aspose_font._brotli import BrotliEncoder, BrotliDecoder # internal APISchritt 3: Erstelle eine WOFF2-Schrift (Brotli-komprimiert)
Der Standardweg: konvertiere jede Schrift in WOFF2. Die Brotli-Kompression wird automatisch angewendet.
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")Keine zusätzlichen Schritte sind für die Kompression erforderlich. Die Bibliothek ruft BrotliEncoder intern auf, wenn sie WOFF2-Ausgabe erzeugt.
Schritt 4: Lade und verifiziere eine WOFF2-Schrift
Beim Laden einer .woff2-Datei dekomprimiert die Bibliothek die Brotli-komprimierten Glyphendaten automatisch, bevor sie die Schrift-Eigenschaften bereitstellt:
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 erkennt die WOFF2-Magic-Bytes und ruft BrotliDecoder auf, um den Glyphen-Stream zu dekomprimieren, bevor die Woff2Font-Instanz erstellt wird.
Schritt 5: Low-Level-Brotli-Kodierung
Interne API:
BrotliEncoderandBrotliDecodersind interne Dienstprogramme, die sich zwischen Versionen ändern können. Für die WOFF2-Schriftkomprimierung bevorzugen Sie das öffentliche API, das in den Schritten 3-4 oben gezeigt wird.
Verwenden Sie BrotliEncoder direkt, wenn Sie beliebige Binärdaten mit Brotli komprimieren müssen. Der Parameter quality (0–11) steuert die Kompressionsstufe:
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%}")Qualität 11 liefert das beste Kompressionsverhältnis auf Kosten der Kodierungsgeschwindigkeit. Qualität 0 ist am schnellsten. Für Schriftdaten im WOFF2-Ausgabeformat verwendet die Bibliothek die Standard-Qualitätsstufe.
Schritt 6: Low-Level-Brotli-Dekodierung
Verwenden Sie BrotliDecoder.decode, um Brotli-komprimierte Daten zu dekomprimieren:
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 ist eine Klassenmethode, die die komprimierten Bytes entgegennimmt und die dekomprimierten Bytes zurückgibt. Es gibt keinen Streaming-API — das gesamte komprimierte Payload muss in einem Aufruf bereitgestellt werden.
Wann Low-Level-Brotli-APIs zu verwenden sind
Die BrotliEncoder und BrotliDecoder Klassen sind nützlich, wenn:
- Sie müssen beliebige Binärdaten komprimieren oder dekomprimieren, unabhängig von der Schriftverarbeitung (z. B. das Komprimieren von Font-Metadaten oder benutzerdefinierten Datenblöcken).
- Sie müssen vorab prüfen, dass ein Brotli-komprimierter Payload wohlgeformt ist, bevor Sie ihn an einen WOFF2-Parser übergeben.
- Sie erstellen ein Test-Setup, das Daten mit bekannten Kompressionsraten erfordert.
Für alle üblichen Font-Operationen (Laden, Konvertieren, Speichern von WOFF2) benötigen Sie nicht die Low-Level-API — FontLoader.open und FontConverter.convert übernehmen Brotli transparent.
Häufig gestellte Fragen
Benötigt die Bibliothek ein externes brotli-Paket?
Nein. Aspose.Font FOSS für Python enthält eine eigene Brotli-Implementierung. Kein brotli, brotlicffi oder ähnliches Paket ist erforderlich.
Welche Komprimierungsqualität verwendet die Bibliothek für WOFF2?
Die Bibliothek verwendet die Standard-Qualitätsstufe für die WOFF2-Ausgabe. Um die Qualitätsstufe für benutzerdefinierte Komprimierungsaufgaben zu steuern, verwenden Sie BrotliEncoder(quality=N), wobei N zwischen 0 (am schnellsten) und 11 (beste Kompression) liegt.
Kann ich einen WOFF2-Glyph-Stream direkt dekomprimieren?
WOFF2-Glyph-Daten verwenden eine Kombination aus Brotli-Dekompression und einer schriftspezifischen Transformation (das “transformed” Tabellenformat). Das reine Dekomprimieren des rohen Brotli-Streams reicht nicht aus, um eine nutzbare Schrift wiederherzustellen – Sie müssen die WOFF2-Datei über FontLoader.open laden, das sowohl die Brotli-Dekompression als auch die inverse Tabellentransformation anwendet.