Monalog

3141人のHaskell好きが訪れました

OGP画像をHaskellで作ろう:その1

2026/03/05

OGPである。ブログと言えばOGPであり、OGPといえば記事タイトル画像の自動生成である。

つまりHaskellでOGP画像を作ろうという企画が始まったということになる。

いくつか考えたが、やはりアナログな感じで行きたい。画像作成ライブラリを使うなどとんでもない。調査をしたところ、いわゆるビットマップフォントを使えば、ドット絵のように文字を描画することができそうだと知った。

フォントデータもTTFなどではなく、BDF形式というフォーマットであればテキストデータで、フォント情報が定義されているという。まさにHaskellでパースしてくださいと言わんばかりである。さらにBDF形式で日本語が扱えるフォントを探したところ「東雲フォントファミリー」と出会った。

東雲フォントファミリーは、古川泰之さんが作られたフォントで、パブリックドメインで利用が可能ということなので今回採用させてもらった。感謝しかない。

なお、BDF形式は以下のようになっている。

STARTCHAR 3a79
ENCODING 14969
SWIDTH 960 0
DWIDTH 12 0
BBX 12 12 0 -2
BITMAP
..@...@..@..
..@.@..@.@..
..@..@.@.@..
@@@@@@..@...
..@....@....
.@@@..@.....
.@@.@@@@@@@.
.@@..@..@...
@.@..@..@...
@.@.@@@@....
..@...@.@...
..@.@@...@..
ENDCHAR

アスキーアートのようにフォント見た目のまま情報が格納されている。ちなみに上の文字は「桜」。春の息吹を感じる。

東雲フォントファミリーでは懐かしのISO-2022-JPで情報定義されている。例えば「桜」をコード変換すると 3a79 になる。そこで、Haskellお得意のファイルを1行ずつ走査する再帰処理をして必要なフォントデータを抜き出せば、ピクセル情報が手に入るというわけ。

あとはピクセル情報を画像ファイルに変換する処理が残るわけだが…今日は力尽きたのでここまで。次回は画像フォーマットについて調査する。

戻る