Introducere

WOFF2 (Web Open Font Format 2) utilizează Brotli ca algoritm de comprimare. Spre deosebire de WOff 1, care folosește zlib, WOF2 aplică Brodli la o reprezentare pre-transformată a tabelei glifului, obținând în mod obișnuit 20-30% mai bună compresie decât WOFC 1. Acest lucru face din WOFP2 formatul preferat pentru tipografia web.

Aspose.Font FOSS for Python handles all Brotli operations internally through its în grupuri BrotliEncoder și de: BrotliDecoder Nu există clase externe. brotli, brotlicffi, sau un pachet similar este necesar. API standard de conversie a fonturilor aplică compresia Brotli în mod transparent la producerea de ieșiri WOFF2.

Biblioteca este publicată pe PyPI ca: aspose-font sub licenţa MIT.


Caracteristici cheie

Convertiți fonturi în WOFF2

Utilizarea principală a lui Brotli în Aspose.Font este compresia automată WOFF2. FontConverter.convert cu: FontType.WOFF2 pentru a produce un Brotli-comprimate font web:

from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontType
from pathlib import Path

# Load any supported format
font = FontLoader.open("MyFont.ttf")   # TTF, OTF, WOFF, EOT, CFF, TYPE1

# Convert to WOFF2 — Brotli applied internally
woff2 = FontConverter.convert(font, FontType.WOFF2)
output = woff2.to_bytes(FontType.WOFF2)

Path("MyFont.woff2").write_bytes(output)
print(f"WOFF2 output: {len(output)} bytes")

De asemenea, puteți converti un fișier WOFF 1 existent în WOff2 pentru a îmbunătăți compresia:

from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontType
from pathlib import Path

woff = FontLoader.open("MyFont.woff")
woff2 = FontConverter.convert(woff, FontType.WOFF2)
Path("MyFont.woff2").write_bytes(woff2.to_bytes(FontType.WOFF2))
print("Upgraded WOFF 1 (zlib) -> WOFF2 (Brotli)")

Încărcarea fonturilor WOFF2

FontLoader.open decomprimează automat datele de glif comprimate prin Brotli:

from aspose_font.loader 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}")

Nu este necesar niciun pas de descompresiune. BrotliDecoder la o dată de fluxul de glif înainte de a construi Woff2Font În cazul în care.


Codarea Brotli la nivel scăzut

Notificare internă API: Începe.BrotliEncoder și de: BrotliDecoder sunt interne. serviciile de utilitate (aspose_font._brotli) Nu fac parte din suprafața API publică. Pentru compresia WOFF2, preferați: FontLoader.open() combinat cu: Woff2Font, care se ocupă de Brotli . în mod transparent.

Pentru comprimarea datelor binare arbitrare, independent de operațiunile fontului., în interiorul BrotliEncoder expune o quality parametru (0-11):

from aspose_font._brotli import BrotliEncoder  # internal API

data = b"Sample data to compress" * 200

# quality=11 = maximum compression; quality=0 = fastest
encoder = BrotliEncoder(quality=11)
compressed = encoder.encode(data)

ratio = len(compressed) / len(data)
print(f"Original   : {len(data)} bytes")
print(f"Compressed : {len(compressed)} bytes")
print(f"Ratio      : {ratio:.2%}")

BrotliEncoder.encode(data) acceptă bytes şi retururi. bytes.- Codatorul . instanta nu este reutilizabilă între apeluri cu setări de calitate diferite create o nouă instanță pentru fiecare nivel de calitate.


Decodarea Brotli de nivel scăzut

Notificare internă API: A se vedea anunțul de mai sus BrotliDecoder este, de asemenea, un utilitate internă.

BrotliDecoder.decode este o metodă la nivel de clasă care decomprimează orice Brotli încărcătură utilă:

from aspose_font._brotli import BrotliEncoder, BrotliDecoder  # internal API

original = b"Round-trip compression test" * 100

# Compress
encoder = BrotliEncoder(quality=6)
compressed = encoder.encode(original)
print(f"Compressed to {len(compressed)} bytes")

# Decompress
recovered = BrotliDecoder.decode(compressed)
assert recovered == original
print(f"Decompressed: {len(recovered)} bytes — data intact: {recovered == original}")

BrotliDecoder.decode ia o bytes încărcătură utilă și returnări; bytes.Procesează întreaga încărcătură într-o singură apelare nu există interfaţă de streaming.


Ghidul nivelului de comprimare

În ceea ce priveşte quality parametru în BrotliEncoder.__init__ hărți la standard Brotli niveluri de calitate:

CalitateViteza de funcționareRaportul de comprimareUtilizare tipică
0Cel mai rapid.Cel mai mic nivelÎn timp real / sensibil la latență
1-3Rapidă.Nivel scăzutDatele de streaming
4-6EchilibratăMediuUtilizare generală (recomandată)
7-9Încet.Înaltă.Acțiuni de capital
10-11Cel mai lent.Cel mai înalt nivelFişiere de font, arhivă

Pentru producția de font (WOFF2), calitatea 11 oferă cea mai bună dimensiune a fișierului și este utilizată. în standardul FontConverter.convert traseu.


Început rapid

Instalați biblioteca:

pip install "aspose-font>=1.0.0"

Convertiti o TTF în WOFF2 și verificați compresia:

from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontType
from pathlib import Path

# Convert to WOFF2 (Brotli applied automatically)
ttf = FontLoader.open("MyFont.ttf")
woff2 = FontConverter.convert(ttf, FontType.WOFF2)
woff2_bytes = woff2.to_bytes(FontType.WOFF2)

# Compare sizes
ttf_bytes = ttf.to_bytes(FontType.TTF)
print(f"TTF   : {len(ttf_bytes)} bytes")
print(f"WOFF2 : {len(woff2_bytes)} bytes  ({len(woff2_bytes)/len(ttf_bytes):.1%} of TTF)")

Path("MyFont.woff2").write_bytes(woff2_bytes)
print("Done — WOFF2 saved")

Sursă deschisă și licență

Aspose.Font FOSS for Python is released under the MIT License. The bundled Brotli Implementarea este inclusă în pachet sub propria licență open-source. pot folosi biblioteca în proiecte personale, comerciale și open-source fără costuri.


Cum să începem?

Resurse conexe