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:BrotliDecodersunt 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
BrotliDecodereste, 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:
| Calitate | Viteza de funcționare | Raportul de comprimare | Utilizare tipică |
|---|---|---|---|
| 0 | Cel mai rapid. | Cel mai mic nivel | În timp real / sensibil la latență |
| 1-3 | Rapidă. | Nivel scăzut | Datele de streaming |
| 4-6 | Echilibrată | Mediu | Utilizare generală (recomandată) |
| 7-9 | Încet. | Înaltă. | Acțiuni de capital |
| 10-11 | Cel mai lent. | Cel mai înalt nivel | Fiş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.