水深1mm

広く浅い個人的メモ。

非等幅フォントのBMFont出力を等幅に変換するスクリプト

nyahoon.com

ということらしい。のでコレをpythonで処理。

BMFontで出力した.fntファイルのパスを引数にして実行。
出力は同階層に.fnt.outで出力される。

# -*- coding: utf-8 -*-

import sys
import re

if __name__ == '__main__':
    font_file = sys.argv[1]
    print 'target_file : ', font_file

    font_data = open(font_file, mode='r')
    output_data = open(font_file + '.out', mode='w')

    fix_width = 66
    for data in font_data.readlines():
        if 'xoffset' in data and 'xadvance' in data:
            ofs, adv = re.findall('xoffset=(.?\d+).*xadvance=(.?\d+)', data)[0]

            if fix_width > int(adv):
                data = data.replace('xoffset=' + ofs, 'xoffset=' + str((int(fix_width) - int(adv)) / 2 + int(ofs)))
                data = data.replace('xadvance=' + adv, 'xadvance=' + str(fix_width))

        output_data.writelines(data)

    font_data.close()
    output_data.close()

出力されたものを

github.com

で使用し、Unityのカスタムフォントとして等幅表示されることを確認。