GimpのScript-fuなど少し。

ある日、「僕みたいな幾何学模様ばっかりのゲームでジャギーは美しくないよなー」と
思い立って、id:o_megaさんのま〜ぶる++の付属テキスト読んでたら、
きれいなボールの描画について書いてあったのでした。
描くところを白黒グレーのマスクで減算して、本体を加算してふちの部分が
いい感じに合成されるというからくりみたいです。
それで実際にいつもどおりPygameで試していたのですが、よく考えたら
pngってもともとαチャンネルもてるわけで。それでもう少し調べたら
どこかでゲーム用のドット絵は

  1. Gimpで読み込む
  2. αチャンネル持たせる
  3. 透過色を透過する
  4. ガウスぼかしかける
  5. Gimpでα情報もちのpngを保存する

ということをやるといい感じになるといううわさを
どこかで(後で調べる)聞いたので、Script-fuっていうGimp付属の強力変態バッチで
自動化してみた。なんでSchemeなんだよ!

;referenced mikei256's diary. thank you.
(define (dotpicgauss inFile outFile)
    (let* (
        (image (car (gimp-file-load 1 inFile inFile)))
        (layer (car (vector->list (car (cdr (gimp-image-get-layers image))))))
        )
        (gimp-layer-add-alpha layer)
        (plug-in-colortoalpha 1 image layer '(255 255 255))
        (gimp-context-set-foreground '(255 255 255))
        (plug-in-gauss-iir 1 image layer 10 10 10)
;        (gimp-display-new image)
        (file-png-save2 1 image layer outFile outFile 0 9 1 0 0 0 0 0 0)
    )
)

(script-fu-register "dotpicgauss"
     _"<Toolbox>/Xtns/Script-Fu/Utils/dotpicgauss..."
     "Add alpha channnel, set transparency color as white and use gauss-blur"
     "ashiato45"
     "ashiato45"
     "2009 02 26"
     ""
     SF-VALUE "infile"   "\"01.png\""
     SF-VALUE "outfile"  "\"01.png\""
)

mikei256's diaryを参考にさせていただきました。ありがとうございます。
で、これのうさげ。(Usage)
このテキストをdotpicgauss.scmというファイル名で保存して、
あなたのGimpのscriptフォルダにぶちこんでください。多分あります。
こいつを使うと(Gimpにパスが通っていると仮定するなら)
"C:\Program Files\GIMP-2.0\bin\gimp-2.4.exe" -i --batch="(dotpicgauss \"変換元のファイルの場所\" \"変換先のファイルの場所\") (gimp-quit 0)"
で変換できるようになります。変換先のファイルの拡張子は.pngにしてくださいね!
この機能についての詳細はgoogle:Gimp バッチモードへ。

ただ、これだと一対一変換しかできません。それだとまだ骨が折れるので、
Pythonで俺スクリプト組みました。正直自分でもどういう挙動を期待してるのか分からん。
作りかけですがさらしときます。
あー。ちなみにScript-fuでもそういうことはできなくないみたいです。

import os
import os.path
import sys

gimp = 'C:\\Program Files\\GIMP-2.0\\bin\\gimp-2.4.exe'

def convert(paths):
    a = "\"\"%s\" -i -c -n --batch=\" " % gimp
    for path in paths:
        d = os.path.dirname(path)
        filename = os.path.basename(path)
        filename = ("".join(filename.split(".")[:-1]) + ".png")
        destname = os.path.join(d, "gaussed", filename).replace("\\", "\\\\")
        a += "(dotpicgauss \\\"%s\\\" \\\"%s\\\") " % (path.replace("\\", "\\\\"), destname)
    a += "(gimp-quit 0)\"\""
    print a
    os.system(a)
    return

def main():
    paths = []

    for root, folders, files in os.walk(os.getcwd()):
        for file in files:
            paths.append(os.path.join(root, file))
        break

    cpaths = []
    for i in sys.argv[1:]:
        if os.path.exists(i):
            cpaths.append(i)
            continue
        for j in paths:
            if os.path.basename(j) == i:
                cpaths.append(i)
                continue
    convert(cpaths)

main()

これはひどい
で、Usage。このテキストをコピペしてdotpicgauss.pyとか適当なPythonファイルを作ってください。
で、文頭の「gimp = 」のくだりをご自分のgimpの実行可能ファイルにあわせてください。
あとは、このプログラムに
python dotpicgauss.py hoge.png hogehoge.png piyo.png
とか書けば動く・・・はず。
その結果は変換元ファイルが存在するフォルダのgaussedフォルダの中に出力されます。
もしgaussフォルダが存在しなければ爆発します。なんだそれ。
そのうちなおす。