PythonでWOFFフォントを扱う方法
このガイドでは、Python向けのAspose.Font FOSS を使用して WOFF および WOFF2 Web フォントをロード、検査、変換する方法を示します。WOFF(Web Open Font Format)は、Web 上でフォントを配信する標準です。WOFF 1 は zlib 圧縮を、WOFF 2 は Brotli 圧縮を使用し、どちらも基礎となる TrueType または CFF フォントをラップしています。Aspose.Font FOSS は両フォーマットをロードし、クリーンな API を通じて内部フォントデータを公開します。
ステップバイステップガイド
ステップ 1: パッケージをインストールする
以下のコマンドを使用して Aspose.Font FOSS パッケージをインストールします:
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .ステップ 2: 必要なクラスをインポートする
WOFF フォントを読み込み変換するために FontLoader、FontConverter、および FontType をインポートします:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontTypeステップ 3: WOFF フォントを読み込み、検査する
FontLoader.open() を使用して WOFF ファイルを読み込み、名前、ファミリー、グリフ数などの基本プロパティを取得します:
from aspose_font import FontLoader
woff_font = FontLoader.open("MyFont.woff")
print(f"Name: {woff_font.font_name}")
print(f"Family: {woff_font.font_family}")
print(f"Glyphs: {woff_font.num_glyphs}")
print(f"Type: {woff_font.font_type}")ステップ 4: WOFF メタデータを読み取る
WOFF ファイルには、ライセンス情報、クレジット、説明が含まれる XML メタデータブロックが含まれることがあります。metadata_xml プロパティを介してアクセスします。
from aspose_font import FontLoader
font = FontLoader.open("MyFont.woff")
# WOFF fonts may include an XML metadata block
xml = getattr(font, "metadata_xml", None)
if xml:
print(xml)
else:
print("No metadata in this WOFF file")ステップ 5: 内部 TTF テーブルにアクセスする
WoffFont と Woff2Font の両方は、基礎となる TtfFont を提供する inner_font プロパティを公開します。これを通じて、すべての標準 OpenType テーブルにアクセスできます。
from aspose_font import FontLoader
font = FontLoader.open("MyFont.woff")
# WOFF wraps a TrueType font; access its tables via inner_font
inner = getattr(font, "inner_font")
tables = inner.ttf_tables
print(f"Units/em: {tables.head.units_per_em}")
print(f"Family name: {tables.name.best_name(1)}")ステップ 6: TTF を WOFF に変換する
TTF フォントを読み込み、FontType.WOFF を FontConverter.convert() に渡すことで WOFF 形式に変換します:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
ttf_font = FontLoader.open("MyFont.ttf")
woff_font = FontConverter.convert(ttf_font, FontType.WOFF)
woff_bytes = woff_font.to_bytes()
from pathlib import Path
Path("MyFont.woff").write_bytes(woff_bytes)ステップ 7: TTF を WOFF2 に変換
TTF フォントを読み込み、FontType.WOFF2 を FontConverter.convert() に渡すことで WOFF2 形式に変換します:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
ttf_font = FontLoader.open("MyFont.ttf")
woff2_font = FontConverter.convert(ttf_font, FontType.WOFF2)
woff2_bytes = woff2_font.to_bytes()
from pathlib import Path
Path("MyFont.woff2").write_bytes(woff2_bytes)ステップ 8: WOFF と WOFF2 の相互変換
ロードした WOFF ファイルを WOFF2(またはその逆)に変換するには、対象の FontType を FontConverter.convert() に渡します:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
# WOFF -> WOFF2
woff_font = FontLoader.open("MyFont.woff")
woff2_font = FontConverter.convert(woff_font, FontType.WOFF2)
# WOFF2 -> WOFF
woff2_font = FontLoader.open("MyFont.woff2")
woff_font = FontConverter.convert(woff2_font, FontType.WOFF)一般的な問題と対処法
FontParseException: Invalid WOFF signature — ファイルは有効な WOFF フォントではありません。ファイルが破損しておらず、WOFF のマジックバイトで始まっていることを確認してください。
FontParseException: WOFF table decompression failed — WOFF ファイル内の圧縮テーブルが破損しています。フォントファイルを再ダウンロードしてみてください。
大きな WOFF2 出力 — WOFF2 は Brotli 圧縮を使用しており、WOFF 1(zlib)よりも小さなファイルを生成します。WOFF2 の出力が予想外に大きい場合は、最適化された TTF ソースから作成していることを確認してください。
よくある質問
WOFF と WOFF2 の違いは何ですか?
WOFF 1 は zlib 圧縮を使用し、WOFF 2 は Brotli 圧縮を使用します。WOFF2 は通常、WOFF 1 よりも 20〜30% 高い圧縮率を実現します。どちらも同じ基盤の TrueType または CFF フォントデータをラップしています。
WOFF ファイルからフォントテーブルにアクセスできますか?
はい。inner_font プロパティを使用して基礎となる TtfFont を取得し、inner_font.ttf_tables でテーブルにアクセスしてください。
このライブラリは WOFF メタデータをサポートしていますか?
はい。WoffFont と Woff2Font の両方は、オプションの XML メタデータブロックを含む metadata_xml プロパティを公開します。