PythonでWOFFフォントを扱う方法

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 プロパティを公開します。

参照

 日本語