テキストファイルを読んで画像に縦書きの日本語文字を入れる方法

方法

from PIL import Image, ImageDraw, ImageFont, ImageFilter

def generate_img(text_line, imgname, filename):
    
    text_x = 100
    text_y = 50
    fill='black' 
    fill='red' 
    direction='ttb'
 #    direction='rtl'
    font_size = 72
    font_name = './GN-KillGothic-U-KanaO.ttf'
    font = ImageFont.truetype(font_name, font_size)
    img = Image.open(imgname)
#    img = Image.new('RGB', (500, 500), (128, 128, 128))
#    img.putalpha(0)

    draw = ImageDraw.Draw(img)
    draw.text((text_x, text_y),
              text_line,
              font=font,
              fill=fill, 
              direction=direction
              )

    img.save(filename)

def read_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:  # ファイルをUTF-8エンコーディングで読み込み
        return file.readlines()

def main():
    imgname = 'dwpose.png'
    file_path = "a.txt"  # 入力ファイル名を固定化
    lines = read_file(file_path)

    for index, line in enumerate(lines):
        line = line.strip()
        if line:
 #            imgname = f"input_folder/"+(str(index).zfill(3))+f".png"  
            output_filename = f"dat/"+(str(index).zfill(3))+f".png"  # 出力ファイル名を固定化
            generate_img(line,imgname,output_filename)
            print(f"img '{output_filename}' generated successfully!")

if __name__ == '__main__':
    main()

固定の画像でもできますが連番の画像ファイルを用意すると個別の画像に文字列入れることができます

透明な背景や単色の背景も指定できます

Python

Posted by eightban