Come Aspose.Font utilizza la compressione Brotli per WOFF2 in Python
WOFF2 (Web Open Font Format 2) comprime i dati dei glifi usando Brotli, un algoritmo di compressione senza perdita generico sviluppato da Google. Aspose.Font FOSS per Python gestisce tutte le operazioni Brotli internamente — non è necessario installare alcuna libreria di compressione esterna. Le classi BrotliEncoder e BrotliDecoder incluse sono disponibili per un uso a basso livello quando è necessario comprimere o decomprimere dati arbitrari al di fuori del percorso di conversione standard di WOFF2.
Guida passo-passo
Passo 1: Installa il pacchetto
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .Passo 2: Importa le classi richieste
Per le operazioni standard WOFF2:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontTypePer operazioni Brotli a basso livello (interno API — può cambiare tra le versioni):
from aspose_font._brotli import BrotliEncoder, BrotliDecoder # internal APIPasso 3: Crea un font WOFF2 (compressa con Brotli)
Il percorso standard: converti qualsiasi font in WOFF2. La compressione Brotli viene applicata automaticamente.
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")Non sono necessari passaggi aggiuntivi per la compressione. La libreria chiama BrotliEncoder internamente quando produce l’output WOFF2.
Passo 4: Carica e verifica un font WOFF2
Durante il caricamento di un file .woff2, la libreria decomprime automaticamente i dati dei glifi compressi con Brotli prima di esporre le proprietà del font:
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 rileva i byte magic WOFF2 e invoca BrotliDecoder per decomprimere il flusso dei glifi prima di costruire l’istanza Woff2Font.
Passo 5: Codifica Brotli a basso livello
Interno API:
BrotliEncoderandBrotliDecodersono utility interne che possono cambiare tra le versioni. Per la compressione dei font WOFF2, preferisci il API pubblico mostrato nei Passaggi 3-4 sopra.
Usa BrotliEncoder direttamente quando hai bisogno di comprimere dati binari arbitrari con Brotli. Il parametro quality (0–11) controlla il livello di compressione:
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%}")La qualità 11 offre il miglior rapporto di compressione a scapito della velocità di codifica. La qualità 0 è la più veloce. Per i dati dei font nell’output WOFF2, la libreria utilizza il livello di qualità predefinito.
Passo 6: Decodifica Brotli a basso livello
Usa BrotliDecoder.decode per decomprimere dati compressi con Brotli:
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 è un metodo di classe che prende i byte compressi e restituisce i byte decompressi. Non esiste un API in streaming — il payload compresso completo deve essere fornito in una singola chiamata.
Quando utilizzare le API Brotli a basso livello
Le classi BrotliEncoder e BrotliDecoder sono utili quando:
- È necessario comprimere o decomprimere payload binari arbitrari indipendentemente dall’elaborazione dei font (ad esempio, comprimere i metadati dei font o blocchi di dati personalizzati).
- È necessario pre-validare che un payload compresso con Brotli sia ben formato prima di passarlo a un parser WOFF2.
- Stai creando un fixture di test che richiede dati con un rapporto di compressione noto.
Per tutte le operazioni standard sui font (caricamento, conversione, salvataggio WOFF2), non è necessario il livello basso API — FontLoader.open e FontConverter.convert gestiscono Brotli in modo trasparente.
Domande Frequenti
La libreria richiede un pacchetto brotli esterno?
No. Aspose.Font FOSS per Python include la propria implementazione Brotli. Non è richiesto alcun brotli, brotlicffi o pacchetto simile.
Quale qualità di compressione utilizza la libreria per WOFF2?
La libreria utilizza il livello di qualità predefinito per l’output WOFF2. Per controllare il livello di qualità per operazioni di compressione personalizzate, usa BrotliEncoder(quality=N) dove N è compreso tra 0 (più veloce) e 11 (massima compressione).
Posso decomprimere direttamente un flusso di glifi WOFF2?
I dati dei glifi WOFF2 utilizzano una combinazione di decompressione Brotli e una trasformazione specifica del font (il formato di tabella “transformed”). Decomprimere solo il flusso Brotli grezzo non è sufficiente per recuperare un font utilizzabile — è necessario caricare il file WOFF2 tramite FontLoader.open, che applica sia la decompressione Brotli sia la trasformazione inversa della tabella.