Aspose.Font が Python で WOFF2 用に Brotli 圧縮を使用する方法
WOFF2(Web Open Font Format 2)は、Google が開発した汎用のロスレス圧縮アルゴリズムである Brotli を使用してグリフデータを圧縮します。Aspose.Font FOSS for Python は Brotli のすべての操作を内部で処理するため、外部の圧縮ライブラリをインストールする必要はありません。バンドルされた BrotliEncoder と BrotliDecoder クラスは、標準の WOFF2 変換パス外で任意のデータを圧縮または解凍する必要がある場合に、低レベルで使用できます。
ステップバイステップガイド
Step 1: パッケージをインストール
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .Step 2: 必要なクラスをインポート
標準的な WOFF2 操作の場合:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType低レベルのBrotli操作用(内部API — リリース間で変更される可能性があります):
from aspose_font._brotli import BrotliEncoder, BrotliDecoder # internal APIステップ 3: WOFF2 フォントを作成する(Brotli 圧縮)
標準的な手順: 任意のフォントを WOFF2 に変換します。Brotli 圧縮は自動的に適用されます。
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
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")圧縮のために追加の手順は必要ありません。ライブラリは WOFF2 出力を生成する際に内部で BrotliEncoder を呼び出します。
ステップ 4: WOFF2 フォントを読み込み、検証する
.woff2 ファイルを読み込む際、ライブラリはフォントプロパティを公開する前に Brotli 圧縮されたグリフデータを自動的に展開します:
from aspose_font 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 は WOFF2 のマジックバイトを検出し、Woff2Font インスタンスを構築する前にグリフストリームを展開するために BrotliDecoder を呼び出します。
ステップ 5: 低レベル Brotli エンコーディング
内部 API:
BrotliEncoderandBrotliDecoderはリリース間で変更される可能性のある内部ユーティリティです。WOFF2 フォント圧縮については、上記ステップ3-4に示されたパブリック API を使用してください。
任意のバイナリデータを Brotli で圧縮する必要がある場合は、BrotliEncoder を直接使用してください。quality パラメータ(0–11)は圧縮レベルを制御します:
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%}")品質 11 はエンコード速度を犠牲にして最高の圧縮率を提供します。品質 0 が最速です。WOFF2 出力のフォントデータに対しては、ライブラリはデフォルトの品質レベルを使用します。
ステップ 6: 低レベル Brotli デコード
Brotli 圧縮データをデコードするには、BrotliDecoder.decode を使用してください:
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 は圧縮されたバイト列を受け取り、デ圧縮されたバイト列を返すクラスメソッドです。ストリーミング API は存在せず、圧縮ペイロード全体を一度の呼び出しで提供する必要があります。
低レベル Brotli API の使用タイミング
BrotliEncoder と BrotliDecoder クラスは、以下の場合に便利です:
- フォント処理とは独立して任意のバイナリペイロードを圧縮または解凍する必要がある場合(例: フォントメタデータやカスタムデータブロックの圧縮)。
- Brotli 圧縮されたペイロードが正しく形成されているか事前に検証し、WOFF2 パーサーに渡す必要がある場合。
- 既知の圧縮率データが必要なテストフィクスチャを構築している場合。
すべての標準的なフォント操作(ロード、変換、WOFF2 の保存)において、低レベルの API は必要ありません — FontLoader.open と FontConverter.convert が Brotli を透過的に処理します。
よくある質問
このライブラリは外部の brotli パッケージを必要としますか?
いいえ。Aspose.Font の Python 用 FOSS は独自の Brotli 実装をバンドルしています。brotli、brotlicffi、または同様のパッケージは必要ありません。
ライブラリは WOFF2 に対してどの圧縮品質を使用しますか?
ライブラリは WOFF2 出力にデフォルトの品質レベルを使用します。カスタム圧縮タスクの品質レベルを制御するには、BrotliEncoder(quality=N) を使用し、N は 0(最速)から 11(最高圧縮)までの範囲です。
WOFF2 グリフストリームを直接デコードできますか?
WOFF2 のグリフデータは、Brotli デコードとフォント固有の変換(「transformed」テーブル形式)の組み合わせを使用します。生の Brotli ストリームだけをデコードしても、使用可能なフォントを復元することはできません。FontLoader.open を介して WOFF2 ファイルを読み込む必要があり、これにより Brotli デコードと逆テーブル変換の両方が適用されます。