MLT、または AST ファイルの画像化方法(Python)

MLT、または AST ファイルの画像化方法です。使用言語は Python です。

Python

Python3 系となります。
AA ( テキスト ) の画像化方法は「AA の画像化方法(Python)」で記述していますので参考下さい。
こちらでは、ファイルの読み込みと画像化の処理を合わせたものを記述しています。

コード

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

import re
import html.parser as htmlparser
from PIL import Image, ImageDraw, ImageFont, ImageChops

def text_to_image(text="", file_path="image"):
    '''
    テキストを画像化する
    出力画像形式は PNG 固定(拡張子も .png 固定)

    @param  text 画像化したい文字列
    @param  file_path 保存する画像ファイルパス
    '''

    # &#xxx などの文字を通常の文字へ変換
    parser = htmlparser.HTMLParser()
    text = parser.unescape(text)

    # フォント指定
    # 今回は Saitamaar を使用させて頂いています
    text_font = ImageFont.truetype("./Saitamaar.ttf", 16, encoding="utf-8")
    # 画像を新規作成
    input_img = Image.new("RGBA", (1500, 1000))
    # 描画
    dr_img = ImageDraw.Draw(input_img)
    # テキストの draw サイズを取得
    text_size = dr_img.multiline_textsize(text, font=text_font)
    # テキスト描画
    dr_img.multiline_text((0, 0), text, font=text_font, fill=(0, 0, 0))
    # 余白の領域を取得
    crop_size = input_img.getbbox()
    # 必要なサイズに切り抜き
    input_img = input_img.crop(crop_size)
    # 余白作成用の画像を作成
    # 余白がいらない場合はここらへんの処理は任意で
    new_size = (input_img.size[0] + 200, input_img.size[1] + 40)
    new_image = Image.new("RGBA", new_size, color=(255, 255, 255))
    # 余白画像に AA 画像を合成
    new_image.alpha_composite(input_img, dest=(100, 20))
    # 画像保存
    new_image.save(file_path + ".png", "png")


def mlt_to_image(file, d, name="image", encoding="cp932"):
    '''
    MLT、または AST ファイルを画像化する
    各区切りごとに分割し画像化し、ファイル名を連番で保存する。

    @param  file ファイルパス
    @param  d 保存先ディレクトリ
    @param  name 保存ファイル名
    @param  encoding 文字コード
    '''

    if (file.endswith(".mlt")):
        # MLT ファイルの場合の分割正規表現
        r = '\[SPLIT\](?:\r\n|\n|\r)'
    elif (file.endswith(".ast")):
        # AST ファイルの場合の分割正規表現
        r = '\[AA\]\[.*\](?:\r\n|\n|\r)'
    else:
        # 上記意外は非対応
        return False

    with open(file, "r", encoding=encoding) as f:
        # ファイルの内容をすべて取得
        all_text = f.read()
        # 正規表現で分割
        p = re.compile(r)
        texts = p.split(all_text)
        # 繰り返しすべて画像化
        for i, t in enumerate(texts):
            # 末尾の改行を削除
            t = t.rstrip()
            # 画像化
            if (t != ""):
                text_to_image(t, d + name + str(i))


mlt_to_image("./少女終末旅行.mlt", "./")

フォントファイルと画像化したいファイルを置いて、必要な部分のみ変更して実行して下さい。

出力サンプル

上記コードを実行した場合の出力サンプルです。 ※ 出力したファイルの最初 4 枚。

作成日時:2018-01-26 22:24:34    更新日時:2018-01-26 22:24:34