Cómo Aspose.Font utiliza la composición de los brotes para WOFF2 en Python
WOFF2 (Web Open Font Format 2) comprime sus datos de glifos utilizando Brotli, un propósito general. El algoritmo de composición sin pérdidas desarrollado por Google. Aspose.Font FOSS para las maneras de Python todas las operaciones de Brotli internamente — no es necesario instalar ninguna composición externa La biblioteca, el pacto BrotliEncoder y BrotliDecoder Las clases están disponibles para uso de bajo nivel cuando necesitas comprimir o descomprimir datos arbitrarios fuera del Path de conversión WOFF2.
Guía paso a paso
Paso 1: Instalar el paquete
pip install "aspose-font>=1.0.0"Paso 2: Importar las clases necesarias
Para las operaciones WOFF2 estándar:
from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontTypePara las operaciones Brotli de bajo nivel (API interna - puede cambiar entre las publicaciones):
from aspose_font._brotli import BrotliEncoder, BrotliDecoder # internal APIPaso 3: Crea un WOFF2 Font (Comprimido en brote)
El camino estándar: convertir cualquier letra en WOFF2. la composición de Brotli se aplica automáticamente.
from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontType
from pathlib import Path
# Load a TTF or WOFF source
source = FontLoader.open("MyFont.ttf")
# Convert to WOFF2 — Brotli compression is applied internally
woff2 = FontConverter.convert(source, FontType.WOFF2)
output_bytes = woff2.to_bytes(FontType.WOFF2)
Path("MyFont.woff2").write_bytes(output_bytes)
print(f"WOFF2 size: {len(output_bytes)} bytes")No se necesitan pasos adicionales para la composición.La biblioteca llama a BrotliEncoder de producción interna cuando se produce WOFF2.
Paso 4: Cargar y verificar una font WOFF2
Cuando se carga a .woff2 archivo, la biblioteca decompresan el Glif comprimido por Brotli datos automáticamente antes de exponer las propiedades del font:
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}")FontLoader.open Detecta los bajos y invoces mágicos de WOFF2 BrotliDecoder para decomprimir el flujo glif antes de construir la Woff2Font de instancia.
Paso 5: Código de Brotli bajo nivel
El fuego interno: El
BrotliEncoderyBrotliDecoderSon utilidades internas que puede cambiar entre las libras. para la composición de fontos WOFF2, prefiera el API público que se muestra en los pasos 3-4 arriba.
Uso BrotliEncoder directamente cuando necesitas comprimir los datos binarios arbitrarios con El Brotli. el quality El parámetro (0-11) controla el nivel de compresión:
from aspose_font._brotli import BrotliEncoder # internal API
data = b"Hello, Brotli!" * 100 # Sample data to compress
encoder = BrotliEncoder(quality=11) # quality 11 = maximum compression
compressed = encoder.encode(data)
print(f"Original : {len(data)} bytes")
print(f"Compressed: {len(compressed)} bytes")
print(f"Ratio : {len(compressed)/len(data):.2%}")La calidad 11 proporciona la mejor relación de compresión al costo de la velocidad de codificación.La calidad 0 es más rápida.Para los datos de font en la salida WOFF2, la biblioteca utiliza el nivel de calidad por defecto.
Paso 6: Desciframiento de Brotli de bajo nivel
Uso BrotliDecoder.decode Para descomprimir los datos comprimidos por Brotli:
from aspose_font._brotli import BrotliEncoder, BrotliDecoder # internal API
original = b"Hello, Brotli!" * 100
# Compress
encoder = BrotliEncoder(quality=6)
compressed = encoder.encode(original)
# Decompress
decoded = BrotliDecoder.decode(compressed)
assert decoded == original
print(f"Decoded {len(decoded)} bytes — matches original: {decoded == original}")BrotliDecoder.decode es un método de clase que toma los bajos comprimidos y devolve los bajos descomprimidos. no hay API de streaming — el completo comprimido El pago debe ser proporcionado en una sola llamada.
¿Cuándo usar APIs de Brotli bajo nivel?
El BrotliEncoder y BrotliDecoder Las clases son útiles cuando:
- Usted necesita comprimir o decomprimir las cargas binarias arbitrarias independientemente del procesamiento de fonts (por ejemplo, compresando metadatos de la font o bloques de datos personalizados).
- Usted debe pre-validar que una carga de pago comprimida por Brotli está bien formada antes de pasarla a un parser WOFF2.
- Está construyendo una ficha de prueba que requiere datos conocidos-la relación de compresión.
Para todas las operaciones de fontas estándar (cargar, convertir, ahorrar WOFF2), no se puede Necesita el nivel de API bajo - FontLoader.open y FontConverter.convert Manejando Brotle de forma transparente.
Preguntas frecuentes
¿La biblioteca requiere un paquete de brotli externo?
No. Aspose.Font FOSS para Python punda su propia implementación de Brotli. brotli, brotlicffi,Se requiere un paquete similar.
¿Qué calidad de composición utiliza la biblioteca para WOFF2?
La biblioteca utiliza el nivel de calidad por defecto para la producción WOFF2. nivel de calidad para tareas de composición personalizadas, uso BrotliEncoder(quality=N) donde N Es entre 0 (más rápido) y 11 (mejor compresión).
¿Puedo descomprimir un flujo de WOFF2 Glyph directamente?
Los datos de Glif WOFF2 utilizan una combinación de la decompresión Brotli y un font-specificado. transform (el formato de mesa “transformado”). descomprimir el flujo Brotli crudo solo no es suficiente para recuperar una letra usable — debe cargar el archivo WOFF2 A través de FontLoader.open, que se aplica tanto a la decompresión Brotli como al La mesa inversa.