低解像度の小型ディスプレイで1行に表示できる文字数を増やすため、細身で幅を抑えたフォント集「PixelFonts」が公開されています。AdafruitGFXとU8g2の両ライブラリに対応し、文字の高さや太さ、立体的な影の有無を選べます。英語以外の文字やフォントデータの扱いは、利用するライブラリや形式によって異なります。

PixelFonts - Pixel fonts for tiny displays
出典: github.com

PixelFontsは文字の幅と高さを選べる

PixelFontsは、小さな画面で1行にできるだけ多くの文字を収められるよう、細く幅を抑えて作られたフォントファミリーです。電子工作などで使われるAdafruitGFXとU8g2の描画ライブラリに対応しており、表示処理には各ライブラリの通常の書き方を使い、フォントにPixelFontsを指定します。

Basic fonts
出典: github.com

通常のフォントには、大文字の高さが5ピクセルから21ピクセルまでのものや、文字幅が5列・7列・11列のものがあります。線の太さは1ピクセルのthin、2ピクセルのsemibold、3ピクセルのboldから選べます。選択肢のあるサイズはフォント名で判別できます。

3D fonts
出典: github.com

一部のフォントには、輪郭と影を付けた3D版もあります。3D版は通常版より高さが3ピクセル増え、文字間と行間に1ピクセルの隙間が入ります。隙間を設けない「3d_condensed」版もあり、表示の見た目や収まりに応じて選べます。

AdafruitGFXとU8g2では拡張文字の扱いが異なる

PixelFontsは両ライブラリ向けのフォントを用意していますが、拡張ラテン文字を使う条件は同じではありません。AdafruitGFX向けにはASCIIのみの英語版と、アクセント付き文字などを含む拡張ラテン版があります。後者を使うにはUTF-8対応のAdafruitGFXフォークが必要です。

標準版AdafruitGFXでも拡張ラテン版のフォントを読み込めますが、英語の文字だけを表示する場合も追加データ分のメモリーを使います。そのため、英語のみなら英語版の使用が推奨されています。U8g2向けには別形式のフォントが用意され、英語版と拡張ラテン版を制限なく使用できます。

拡張ラテン版で追加されるアクセント付き文字は小文字のみで、大文字のアクセント付き文字は含まれません。また、チェコ語の特殊文字は制作者が手作業で作り、それ以外の拡張ラテン文字はAI生成とされています。対応言語として英語、スペイン語、フランス語、イタリア語、チェコ語などが挙げられています。

表示サイズを拡大し、3D版も選択できる

AdafruitGFXでは、フォント指定後にsetTextSize()を使い、各フォントの画素を正方形のブロックとして拡大できます。たとえば9×5ピクセルのthinフォントを3倍にすると、各画素は3×3ブロックになり、大文字の高さは27ピクセルになります。

横幅と高さを別々に指定する方法もあり、行の高さも指定した倍率に応じて拡大されます。この方法では、拡大表示用のフォントデータを別に用意せず、既存フォントの画素を大きく描きます。

3D版は影と輪郭を含むため、通常版より表示領域を多く使います。3Dの文字間・行間を詰めた版もあり、隙間の有無を選べます。画面の幅や行数に合わせて、文字の高さ、線の太さ、装飾を組み合わせられます。

BDF形式で変換や編集に対応

PixelFontsの各フォントには、BDF形式のファイルも含まれます。BDFは文字のビットマップ情報を記述するフォント形式です。PixelFontsのファイルはUnicodeで符号化され、u8g2のbdfconv、FontForge、LVGLのフォントコンバーターなどで扱えます。

U8g2用のフォントには、それぞれ行の高さを表す値も付属します。BDFではフォントの上昇量と下降量を足した値が行の高さになります。文字の間隔や行の配置を扱う際に、この値を参照できます。