Come Aspose.Font utilizza la compressione Brotli per WOFF2 in Python

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 FontType

Per operazioni Brotli a basso livello (interno API — può cambiare tra le versioni):

from aspose_font._brotli import BrotliEncoder, BrotliDecoder  # internal API

Passo 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: BrotliEncoder and BrotliDecoder sono 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.

Vedi anche

 Italiano