はじめに
この実験では、Python の Matplotlib ライブラリを使って、フォントテーブルがどのように互いに関連しているかの例を通じて案内します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
フォントの読み込み
まず、フォントファイルを読み込む必要があります。この例では、DejaVuSans.ttf フォントファイルを使用します。
import os
import matplotlib
from matplotlib.ft2font import FT2Font
font = FT2Font(os.path.join(matplotlib.get_data_path(), 'fonts/ttf/DejaVuSans.ttf'))
文字マップの設定
次に、文字マップを標準の Unicode 文字マップに設定します。
font.set_charmap(0)
文字コードとグリフの取得
フォント内の文字コードと対応するグリフを取得し、それらを 2 つの辞書codedとglyphdに格納します。
codes = font.get_charmap().items()
coded = {}
glyphd = {}
for ccode, glyphind in codes:
name = font.get_glyph_name(glyphind)
coded[name] = ccode
glyphd[name] = glyphind
グリフの読み込み
次に、フォントからグリフ(文字'A')を読み込み、glyph.bbox属性を使ってそのバウンディングボックスを表示します。
code = coded['A']
glyph = font.load_char(code)
print(glyph.bbox)
ネ字情報の取得
font.get_kerning()メソッドを使って、2 つのグリフ間のネ字情報を取得することができます。この例では、'A'と'V'のグリフ間、および'A'と'T'のグリフ間のネ字情報を取得します。
## 'AV'のネ字情報
print('AV', font.get_kerning(glyphd['A'], glyphd['V'], KERNING_DEFAULT))
print('AV', font.get_kerning(glyphd['A'], glyphd['V'], KERNING_UNFITTED))
print('AV', font.get_kerning(glyphd['A'], glyphd['V'], KERNING_UNSCALED))
## 'AT'のネ字情報
print('AT', font.get_kerning(glyphd['A'], glyphd['T'], KERNING_UNSCALED))
まとめ
この実験では、フォントファイルを読み込み、文字マップを設定し、文字コードとグリフを取得し、グリフを読み込み、グリフ間のネ字情報を取得する方法を学びました。これらは、Python プロジェクトでフォントとテキストを扱いたい人にとって役立つ技術です。