Introduction

WOFF2 (Web Open Font Format 2) utilise Brotli comme son algorithme de compression. Contrairement à Woff 1 qui utilisait zlib, WIFF 2 applique Broti à une représentation de table glyphée pré-transformée, généralement atteignant 20-30% meilleure comprimation que WFF 1.

Aspose.Font FOSS for Python handles all Brotli operations internally through its Bandeur BrotliEncoder et BrotliDecoder Les classes, pas extérieures brotli, brotlicffi, ou un paquet similaire est nécessaire. API de conversion standard de lettres appliquer la compression de Brotli transparemment lors de la production de WOFF2.

La bibliothèque est publiée sur Pypi comme aspose-font sous la licence du MIT.


Fonctionnalités clés

Conversion de fonts en WOFF2

L’utilisation primaire de Brotli dans Aspose.Font est la compression automatique WOFF2. FontConverter.convert avec FontType.WOFF2 Pour produire un Brotli-comprimé Le site 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")

Vous pouvez également convertir d’un fichier WOFF 1 existant à WofF2 pour mettre à jour la compression:

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)")

Carte de fonts WOFF2

FontLoader.open décomprimer les données glyphées Brotli automatiquement :

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}")

Pas de décompression n’est nécessaire. le chargement s’applique BrotliDecoder à la Le flux glyph avant la construction de l’eau Woff2Font et instance.


Code de Brotli à bas niveau

Avis sur l’API : - LeBrotliEncoder et BrotliDecoder sont intérieurs Les utilités (aspose_font._brotliIls ne font pas partie de la surface publique d’API. et peut changer entre les sorties. Pour la compression de lettres WOFF2, préférez FontLoader.open() combinée avec Woff2Font,qui gère le brouillard transparente .

Pour compresser les données binaires arbitraires indépendamment des opérations de caractères, Le intérieur BrotliEncoder Exposé à quality Paramètres (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) accepter bytes et retournera bytes.Le codeur l’instant n’est pas réutilisable par rapport aux appels avec des paramètres de qualité différents — créer Un nouveau niveau pour chaque niveau de qualité.


Décodage de Brotli à faible niveau

Avis sur l’API : Voir la note ci-dessus - BrotliDecoder Il est aussi un Utilisation interne.

BrotliDecoder.decode C’est une méthode de niveau classe qui décomprime n’importe quel Brotli. Payement :

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 Il prend une bytes Le paiement et le retour bytes.Il procède l’ensemble de la charge dans une seule appel — il n’y a pas d’interface streaming.


Guide de niveau de compression

Le quality Paramètres dans BrotliEncoder.__init__ Les cartes de la Brotli standard Niveaux de qualité :

QualitévitesseRatio de compressionUtilisation typique
0plus rapideLe plus basTemps réel / sensible à la latence
1-3rapidebasseStreaming des données
4-6équilibrémédiumUtilisation générale (recommandée)
7-9lenteurhauteLes actifs statiques
10-11plus lentLe plus hautFiche de fichier, archive

Pour la production de lettres (WOFF2), la qualité 11 donne la meilleure taille de fichier et est utilisée Dans la norme FontConverter.convert Le chemin.


Démarrage rapide

Installation de la bibliothèque :

pip install "aspose-font>=1.0.0"

Convertez un TTF à WOFF2 et vérifiez la compression :

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")

Source ouverte et licence

Aspose.Font FOSS for Python is released under the MIT License. The bundled Brotli La mise en œuvre est inclus dans le paquet sous sa propre licence open source. Vous pouvez utiliser la bibliothèque dans des projets personnels, commerciaux et open-source sans frais.


Pour commencer

Ressources associées