読者です 読者をやめる 読者になる 読者になる

画像からAAを生成するプログラムを作った

python プログラミング

自作のゲームに画像を表示したいと思ったんだけど、console画面なので、画像は使えない。ってことで、AAを表示してみようと思いついた。

そうは言っても、AAなんて作ったこと無いし、作る気力もない。 それなら、画像投げたら自動的にAA作ってくれる機能ないかなぁと思い、自作することにしました。

先人達を探すべく、ググっていると、

Python/PILによる画像のグレイスケール化とアスキーアート化

こちらの方のエントリーが非常に参考になりました。PILってなんか聞いたことあったけど、こう使うんだ。。と納得。

AAを画像で保存する感じだったので、そこら辺だけこちらの仕様に合わせて変更しました。

txtファイルにAAを出力するように改造し、とりあえず出来た。

from PIL import Image


def create_aa(in_img, w, h):
    input_pix = in_img.load()
    character = ""
    aa_list = []
    div = 32
    size = w // div
    for i in range(0, h, size):
        for j in range(0, w, size):
            r, g, b = input_pix[j, i]
            gray = r*0.2126 + g*0.7152 + b*0.0722
            if gray > 250:
                character = " "
            elif gray > 230:
                character = "`"
            elif gray > 200:
                character = "\""
            elif gray > 175:
                character = "+"
            elif gray > 150:
                character = "*"
            elif gray > 125:
                character = "#"
            elif gray > 50:
                character = "W"
            aa_list.append(character)
        aa_list.append("\n")
    return aa_list

if __name__ == "__main__":
    input_image = Image.open("画像パス")
    width = input_image.size[0]
    height = input_image.size[1]
    output_image = create_aa(input_image, width, height)
    with open("aa.txt", "wt", encoding='utf-8') as fout:
        for x in output_image:
            fout.write(x)