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: El
BrotliEncoderyBrotliDecoderSon 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, prefieraFontLoader.open()combinado conWoff2Font,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 -
BrotliDecoderTambié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:
| calidad | Velocidad | Ratio de compresión | Usos típicos |
|---|---|---|---|
| 0 | más rápido | El más bajo | Temas de tiempo real / latencia sensible |
| 1-3 | rápido | bajo | Streaming de datos |
| 4-6 | equilibrado | Medios | Descripción general (recomendada) |
| 7-9 | Lentamente | Alta | Activos Estáticos |
| 10-11 | más lento | El más alto | Archivo 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
- Empezando a
- WOFF Cómo Guía
- Compresión de la manzana como
- Referencia de API
- Artículos de la Base de Conocimientos