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á.BrotliEncoder e a) BrotliDecoder sã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:

QualidadeVelocidadeRelação de compressãoUso típico
0Mais rápido.Nível mais baixoSensível a tempo real / latência
1-3Rápido .BaixoTransmissão de dados em streaming
4-6EquilibradoMédioUtilização geral (recomendado)
7-9Lento .Alto.Activos estáticos
10-11Mais lento.Mais altoArquivos 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.


Começar a Fazer

Recursos relacionados