Introducción

WOFF2 (Web Open Font Format 2) utiliza Brotli como su algoritmo de compresión. A diferencia de Woff 1 que usa zlib, WIFF 2 aplica a Broti a una representación de tabla de glif pre-transformada, normalmente alcanzando un 20-30% mejor compresión que WUF 1. Esto hace que la WFF2 sea el formato de entrega preferido para la tipografía web.

Aspose.Font FOSS for Python handles all Brotli operations internally through its Búnquido BrotliEncoder y BrotliDecoder No externa, no exteriores brotli, brotlicffi, o se necesita un paquete similar. la API de conversión de fontos estándar aplica la composición de Brotli transparentemente al producir el rendimiento WOFF2.

La biblioteca se publica en Pypi como aspose-font bajo la licencia de MIT.


Características clave

Convertir Fontes en WOFF2

El uso primario de Brotli en Aspose.Font es la composición automática WOFF2. FontConverter.convert con FontType.WOFF2 Para producir un Brotli-comprimido Web de Fontes:

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

También puede convertir de un archivo WOFF 1 existente a WofF2 para actualizar la composición:

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

Cargar WOFF2 Fonts

FontLoader.open descomprimir los datos de Glif comprimidos por Brotli automáticamente:

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

No se requiere paso de descomposición. el cargador se aplica BrotliDecoder Para el El flujo de glicos antes de construir el Woff2Font de instancia.


Bajo nivel de codificación

Noticias de API: ElBrotliEncoder y BrotliDecoder Son internos Los servicios (aspose_font._brotliNo son parte de la superficie pública del API. y puede cambiar entre las publicaciones. para la composición de fontos WOFF2, prefiera FontLoader.open() combinado con Woff2Font,que se trata de Brotli transparente de manera.

Para comprimir los datos binarios arbitrarios independientemente de las operaciones de fontas, El interior BrotliEncoder Exponer a quality El número de parámetros (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) aceptan bytes y regresa bytes.El encoder la instancia no es reutilizable en las llamadas con diferentes configuraciones de calidad — crear Un nuevo tipo de calidad para cada nivel.


Desciframiento de Brotli bajo nivel

Noticias de API: Ver el artículo anterior - BrotliDecoder También es un utilidad interna.

BrotliDecoder.decode es un método de nivel de clase que descomprende cualquier Brotli El pago:

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 Tiene a bytes El pago y los retornos bytes.Se procesan la carga total en una llamada — no hay interfaz de streaming.


Guía de nivel de compresión

El quality Parámetros en BrotliEncoder.__init__ Mapa de la Brotli estándar Nivel de calidad:

calidadVelocidadRatio de compresiónUsos típicos
0más rápidoEl más bajoTemas de tiempo real / latencia sensible
1-3rápidobajoStreaming de datos
4-6equilibradoMediosDescripción general (recomendada)
7-9LentamenteAltaActivos Estáticos
10-11más lentoEl más altoArchivo de archivos, archivo

Para la producción de fuentes (WOFF2), calidad 11 da el mejor tamaño del archivo y se utiliza En el estándar FontConverter.convert El camino.


Inicio rápido

Instalar la biblioteca:

pip install "aspose-font>=1.0.0"

Convertir un TTF en WOFF2 y verificar la compresión:

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

Open Source y Licenciación

Aspose.Font FOSS for Python is released under the MIT License. The bundled Brotli La implementación está incluida en el paquete bajo su propia licencia de código abierto. Puede utilizar la biblioteca en proyectos personales, comerciales y de código abierto sin costo.


Empezando a

Recursos relacionados