awk でアスキーアート画像を生成する

Java でアスキーアート画像を生成する - IT戦記 にインスパイヤされて、xgawk の GD の機能を使い、テキストからアスキーアートの画像を生成します。 元になっているものは Java の AWT (Abstract Windowing Tools) の機能を使っているようですが (Java は素人なので、間違っていたらごめんなさい)、ここでは GD を使います。

OSC2008 Tokyo/Spring :: AA to PNGAWK Users JP :: 画像ファイルのリサイズ などで使っている機能を持ちいれば簡単にできますが、ここではさらに省略して分かりやすくしてみました。

IPA モナーフォントが ~/.fonts ディレクトリにあることを前提にしています。

#! /usr/local/bin/xgawk -f
# aa2png.awk
# AA を PNG に変換する
# usage: xgawk -f aa2png.awk foo.txt

@load gd

BEGIN {
    text_file = ARGV[1];
    font_name = ENVIRON["HOME"] "/.fonts/ipagp-mona.ttf";
    output_file = "aa2png.png";
    width = 540;
    height = 290;

    # イメージハンドラの作成
    image_handler = gdImageCreateTrueColor(width, height);

    # 背景を白に設定
    white_image = gdImageColorAllocate(image_handler, 255, 255, 255);

    # 矩形の下地を作成
    gdImageFilledRectangle(image_handler, 0, 0, width, height, white_image);

    # フォントの色は黒
    color = gdImageColorAllocate(image_handler, 0, 0, 0);
}

{
    # 文字列をイメージハンドラに流し込んでいく
    gdImageStringFT(image_handler, brect, color, font_name, 12, \
                    0, 0, NR * 20, $0);
}

END {
    # イメージの出力
    gdImagePngName(image_handler, output_file);
    gdImageDestroy(image_handler);
}

GD の書式の羅列で awk らしさが全くないのですね。

さて、ここで以下のようなサンプルテキストを用意します。

$ cat sample.txt
        ____
        /     \     こんなクソスレ立てんじゃねーよカス氏ね・・・っと
     /   ⌒  ⌒ \
   /    (●)  (●) \   厨房を煽るのは最高だお!
    |   、" ゙)(__人__)"  )    ___________
   \      。` ⌒゚:j´ ,/ j゙~~| | |             |
__/          \  |__| | |             |
| | /   ,              \n||  | |             |
| | /   /         r.  ( こ) | |             |
| | | ⌒ ーnnn        |\ (⊆ソ .|_|___________|
 ̄ \__、("二) ̄ ̄ ̄ ̄ ̄l二二l二二  _|_|__|_

   【やる夫:24歳:ニート】

等幅だと見づらいですね。

では、実行してみます。

$ xgawk -f aa2png.awk sample.txt

実行すると aa2png.png という名前の PNG ファイルができます。

aa2png.png

tag_xgawk.png