Como Aspose.Font usa a compressão Brotli para WOFF2 no Python
WOFF2 (Web Open Font Format 2) comprime seus dados de glifos usando Brotli, um aplicativo para uso geral. Algoritmo de compressão sem perdas desenvolvido pelo Google. Aspose.Font FOSS para Python manipuladores todas as operações de Brotli internamente não é necessário instalar qualquer compressão externa Biblioteca. O pacote de BrotliEncoder e a) BrotliDecoder Aulas disponíveis para: utilização de baixo nível quando é necessário comprimir ou descomprimir dados arbitrários fora do sistema. Trilha de conversão WOFF2 padrão.
Guia passo a passo
Passo 1: Instalar o pacote
pip install "aspose-font>=1.0.0"Passo 2: Importar as classes necessárias
Para operações WOFF2 padrão:
from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontTypePara operações de baixo nível do Brotli (API interna pode mudar entre as versões):
from aspose_font._brotli import BrotliEncoder, BrotliDecoder # internal APIPasso 3: Criar uma fonte WOFF2 (comprimida por Brotli)
O caminho padrão: converter qualquer fonte para WOFF2. A compressão Brotli é aplicada automaticamente.
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")Não são necessários passos adicionais para a compressão. BrotliEncoder internamente na produção de WOFF2.
Passo 4: Carregar e verificar uma fonte WOFF2
Ao carregar um .woff2 Arquivo, a biblioteca descomprime o glifo comprimido por Brotli. dados automaticamente antes de expor as propriedades da fonte:
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 os bytes mágicos WOFF2 e invoca BrotliDecoder a) para o decompressar o fluxo de glifos antes da construção do Woff2Font - Por exemplo.
Etapa 5: Encriptação Brotli de baixo nível
API interna: Aí está.
BrotliEncodere a)BrotliDecodersão serviços públicos internos. Para a compressão de fontes WOFF2, preferem o código-fonte “Wow” (ou seja, compressão de fonte). API pública, como mostrado nas etapas 3-4 acima.
Utilização: BrotliEncoder diretamente quando você precisa comprimir dados binários arbitrários com Brotli, o “Brotli” é um nome de família. quality Parâmetro (011) controla o nível de compressão:
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%}")A qualidade 11 dá a melhor taxa de compressão ao custo da velocidade de codificação. A Qualidade 0 é a mais rápida. Para dados de fonte na saída WOFF2, a biblioteca usa o nível de qualidade padrão.
Passo 6: Decodificação de Brotli de baixo nível
Utilização: BrotliDecoder.decode para descomprimir dados 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 é um método de classe que toma os bytes comprimidos e Retorna os bytes descomprimidos. Não há API de streaming o comprimido completo A carga útil deve ser fornecida numa única chamada.
Quando usar APIs de baixo nível do Brotli
A Comissão BrotliEncoder e a) BrotliDecoder As classes são úteis quando:
- Você precisa comprimir ou descomprimir cargas binárias arbitrárias independentemente do processamento de fontes (por exemplo, compactar metadados de fonte ou blocos de dados personalizados).
- Você precisa pré-validar que uma carga útil comprimida por Brotli está bem formada antes de passá-la para um parser WOFF2.
- Está a construir um equipamento de teste que requer dados conhecidos sobre o rácio de compressão.
Para todas as operações padrão de fonte (carregamento, conversão, armazenamento WOFF2), você não faz o seguinte: necessitam da API de baixo nível FontLoader.open e a) FontConverter.convert manuseio Brotli transparentemente.
Perguntas Frequentes
A biblioteca requer um pacote de “brotli” externo?
Não. Aspose.Font FOSS para Python agrupa sua própria implementação Brotli. brotli, brotlicffi, ou se for necessário um pacote semelhante.
Que qualidade de compressão a biblioteca usa para o WOFF2?
A biblioteca usa o nível de qualidade padrão para a saída WOFF2. Para controlar o nível de qualidade para tarefas de compressão personalizadas, utilização BrotliEncoder(quality=N) onde: N está entre 0 (mais rápido) e 11 (melhor compressão).
Posso descomprimir um fluxo de glifos WOFF2 diretamente?
Os dados de glifo WOFF2 usam uma combinação de descompressão Brotli e um código específico para fontes. transformar (o formato de tabela “transformado”). Descompressão do fluxo Brotli bruto sozinho não é suficiente para recuperar uma fonte utilizável você deve carregar o arquivo WOFF2 através de: FontLoader.open, que aplica tanto a descompressão de Brotli como o processo de descompressões. Transformação da tabela inversa.