Introdução
WOFF2 (Web Open Font Format 2) usa Brotli como seu algoritmo de compressão. Ao contrário do WOff 1, que utiliza zlib, o WOF2 aplica Brodli a uma representação pré-transformada da tabela de glifos, geralmente alcançando 20-30% melhor compactação do que o Woff 1. Isso torna o Wofff 2 o formato preferido para entrega na tipografia web.
Aspose.Font FOSS for Python handles all Brotli operations internally through its em conjunto BrotliEncoder e a) BrotliDecoder classes, não existem equipamentos externos. brotli, brotlicffi, ou um pacote semelhante é necessário. A API de conversão padrão de fontes aplica a compressão de Brotli transparentemente ao produzir saída WOFF2.
A biblioteca é publicada no PyPI como: aspose-font sob a licença MIT.
Características principais
Converter fontes para WOFF2
A principal utilização de Brotli em Aspose.Font é a compressão automática WOFF2. Use FontConverter.convert com: FontType.WOFF2 para produzir um Brotli-comprimido Fonte web:
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")
Você também pode converter de um arquivo WOFF 1 existente para WOff2 para atualizar a compressão:
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)")
Carregamento de fontes WOFF2
FontLoader.open Descompressar automaticamente os dados de glifo comprimidos por Brotli:
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}")
Não é necessário um passo de descompressão. BrotliDecoder para o fluxo de glifo antes da construção do Woff2Font - Por exemplo.
Código Brotli de baixo nível
Aviso interno da API: Aí está.
BrotliEncodere a)BrotliDecodersão internos. serviços públicos (aspose_font._brotli) Não fazem parte da superfície pública das API. Para a compressão de fontes WOFF2, preferir:FontLoader.open()combinado com:Woff2Font, que trata de Brotli . transparente.
Para comprimir dados binários arbitrários independentemente das operações de fonte, O Conselho de Ministros BrotliEncoder expõe um quality Parâmetro (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) aceita bytes e retornos bytes.O codificador . instância não é reutilizável entre chamadas com diferentes configurações de qualidade create uma nova instância para cada nível de qualidade.
Decodificação de Brotli de baixo nível
Aviso interno da API: Ver o aviso acima
BrotliDecoderé também um Utilidade interna.
BrotliDecoder.decode é um método de nível de classe que descomprime qualquer Brotli Carga útil:
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 toma um bytes Carga útil e devoluções bytes.Processo de análise: A carga útil inteira numa chamada. Não há interface de transmissão.
Guia de Nível de Compressão
A Comissão quality Parâmetro em: BrotliEncoder.__init__ mapas para o Brotli padrão Níveis de qualidade:
| Qualidade | Velocidade | Relação de compressão | Uso típico |
|---|---|---|---|
| 0 | Mais rápido. | Nível mais baixo | Sensível a tempo real / latência |
| 1-3 | Rápido . | Baixo | Transmissão de dados em streaming |
| 4-6 | Equilibrado | Médio | Utilização geral (recomendado) |
| 7-9 | Lento . | Alto. | Activos estáticos |
| 10-11 | Mais lento. | Mais alto | Arquivos de fontes, arquivo |
Para a produção de fontes (WOFF2), a qualidade 11 dá o melhor tamanho do ficheiro e é utilizada. na norma FontConverter.convert caminho.
Começo rápido
Instalar a biblioteca:
pip install "aspose-font>=1.0.0"
Converter um TTF para WOFF2 e verificar a compressão:
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")
Fonte aberta e licença
Aspose.Font FOSS for Python is released under the MIT License. The bundled Brotli A implementação está incluída no pacote sob a sua própria licença de código aberto. podem usar a biblioteca em projetos pessoais, comerciais e de código aberto sem custo.