mieki256's diary



2014/12/10(水) [n年前の日記]

#1 [python][dxruby] make_sfont.pyを修正してみたり

_simple-renpy-tools - A collection of tools written in Python for the Ren'Py Visual Novel Engine - Google Project Hosting で、SFont画像を生成する _make_sfont.py が入手できるけど。文字と文字の隙間が大きくてもそのまま保持してるあたりがなんだか気になったので、隙間をギッチリ詰めて出力する版に改造してみたり。ついでに、文字数を数えて、本来なるべき個数 = 94個になってなければエラーを出して止まるようにもしてみたり。

_make_sfont_wt.py
from PIL import Image
import sys
import os

SEPARATOR_COLOR = (255,0,255, 255)
NO_COL = (0, 0, 0, 0)

def chk_vline_empty(img, x):
    for y in range(img.size[1]):
        _, _, _, a = img.getpixel((x, y))
        if a != 0:
            return False
    else:
        return True

def make_sfont(img_filename, output_name = None):
    img = Image.open(img_filename)
    ow, oh = img.size
    xlist = []
    cx = -1
    for x in range(ow):
        if chk_vline_empty(img, x):
            if cx >= 0:
                xlist.append([cx, x - cx])
                cx = -1
        else:
            if cx < 0:
                cx = x
    if cx >= 0:
        xlist.append([cx, ow - cx])

    if len(xlist) != 94:
        print "Error: character length %d != 94" % len(xlist)
        return

    nw = 1
    for _, w in xlist:
        nw += (w + 1)

    nimg = Image.new("RGBA", (nw, oh), NO_COL)
    nimg.putpixel((0, 0), SEPARATOR_COLOR)
    cx = 1
    for x, w in xlist:
        box = (x, 0, x + w, oh)
        nbox = (cx, 0, cx + w, oh)
        nimg.paste(img.crop(box), nbox)
        nimg.putpixel((cx + w, 0), SEPARATOR_COLOR)
        cx += (w + 1)

    if output_name is None:
        base, name = os.path.split(img_filename)
        name, ext = os.path.splitext(name)
        name = name + '_sfont' + ext
        name = os.path.join(base, name)
    else:
        name = output_name

    nimg.save(name)
    print 'SFont written to %s' % name

if __name__ == '__main__':
    args = len(sys.argv)
    if args == 1 or args > 3 :
        print 'Usage: make_sfont_wt.py IN.png OUT.png'
    elif args == 3:
        make_sfont(sys.argv[1], sys.argv[2])
    else:
        make_sfont(sys.argv[1])

使い方は、
python make_sfott_wt.py IN.png OUT.png
または
python make_sfott_wt.py IN.png
出力ファイル名を省略すると、入力ファイル名_sfont.png で保存される。

ただ、この改造版でギッチリ詰めてしまうと、後からその画像を修正することは難しくなる。オリジナルの make_sfont.py で作った SFont画像は、一番上の1ラインだけ削除すれば、ほぼ元の画像に戻るので、後から修正する可能性が高いなら、この改造版を使わないほうがヨサゲ。

以上です。

過去ログ表示

Prev - 2014/12 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project