Uvod u članak
WOFF2 (Web Open Font Format 2) koristi Brotli kao svoj algoritam za kompresiju. Za razliku od WOff 1 koji koristi zlib, WOF 2 primjenjuje Brutli na unaprijed transformiranu predstavljanje tabele glifa, što obično postiže 20-30% bolju komprimiranje od Woffa 1. To čini WOffo-u omiljenim formatom isporuke za web tipografiju .
Aspose.Font FOSS for Python handles all Brotli operations internally through its Srednje i popodne BrotliEncoder i u članku 1. BrotliDecoder Ne postoje vanjske klase. brotli, brotlicffi,Standardni API za pretvaranje fontova je: U slučaju da je to moguće, potrebno je provesti testiranje na temelju sljedećih kriterija:.
Biblioteka je objavljena na PyPI-u kao: aspose-font pod MIT licencom.
Glavne karakteristike
Konverzija fontova u WOFF2
Primarna upotreba Brotlija u Aspose. font je automatska kompresija WOFF2. FontConverter.convert s: FontType.WOFF2 za proizvodnju Brotli-komprimiranog web font:
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")
Također možete pretvoriti postojeću datoteku WOFF 1 u WOff2 za nadogradnju kompresije:
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)")
Upisivanje WOFF2 fontova
FontLoader.open U ovom slučaju, ako je to moguće, primjenjuje se sljedeća metoda:
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}")
Ne zahtijeva se ni jedan korak dekompresije. BrotliDecoder u skladu s člankom Glifni tok prije izgradnje Woff2Font Primjer.
Brotli kodiranje niskog nivoa
Uputstvo u pogledu internog API-a: Sljedeći članak:
BrotliEncoderi u članku 1.BrotliDecodersu unutarnji. javne usluge (aspose_font._brotliU tom smislu, u skladu s člankom 13. stavkom 1. točka (a) Uredbe (EU) br. Za kompresiju WOFF2 fontova, preporučujem:FontLoader.open()kombinirana s:Woff2Font, koji se bavi Brotlijem. transparentno.
Za kompresiju proizvoljenih binarnih podataka neovisno o operacijama fontova, unutarnji sustav BrotliEncoder izloži se: quality U slučaju da je to moguće, provjerite sljedeće:
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) prihvaća bytes i povratne vrijednosti. bytes.Koder. instanc nije ponovljiva preko poziva s različitim postavkama kvalitete create U skladu s člankom 15. stavkom 1. točkom (a) i podstavkom 7.
Brotli dekodiranje niskog nivoa
Uputstvo u pogledu internog API-a: Vidjeti obavijest gore
BrotliDecoderje također i unutarnja korist.
BrotliDecoder.decode je metoda na razini klase koja dekomprimira bilo Brotli korisni teret:
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 uzima se u obzir: bytes Pružanje i povrat bytes.Procesira se. Cijeli teret u jednom pozivu. Nema strimiranja interfejsa.
Prikaz razine kompresije
U skladu s člankom 1. quality parametar u BrotliEncoder.__init__ Karte standardnog Brotlija razine kvalitete:
| Kvalita | Brzina: | Iznos kompresije | Tipična upotreba |
|---|---|---|---|
| 0 | Najbrži. | Najniži nivo | U realnom vremenu / osjetljivi na latenciju |
| 1-3 | Brzo. | Niska razina | Prometni podaci |
| 4-6 | Izbalansirana | Srednja razina | Sredstva za proizvodnju i isporuku: |
| 7-9 | Polako. | Visoka. | Statična sredstva |
| 10-11 | Najsporiji. | Najviši broj | Datoteke fontova, arhiva |
Za proizvodnju fontova (WOFF2), kvaliteta 11 daje najbolju veličinu datoteke i koristi se: u standardu FontConverter.convert put.
Brzi početak
Instaliraj knjižnicu:
pip install "aspose-font>=1.0.0"
U ovom slučaju, u skladu s člankom 4. stavkom 1. točkom (a) i podstavkom 2. točkama 3. i 5. ovog članka:
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")
Otvoreni izvor i licenciranje
Aspose.Font FOSS for Python is released under the MIT License. The bundled Brotli implementacija je uključena u paket pod vlastitom licencom otvorenog koda. Biblioteka je besplatna za osobne, komercijalne i otvorene projekte.