Pillowで画像に日本語を書き込む


やりたいこと

テキストを画像に書き込み,はみ出そうなら次の行に改行する

実行環境

macOS Mojava 10.14
python 3.5.5
Pillow 5.1.0

サンプルコード

text.txt
あいうえお安以宇衣於アイウエオ阿伊宇江於かきくけこ…
put_text.py
# -*- coding:utf8 -*-
import numpy as np
from PIL import Image, ImageDraw, ImageFont

def draw_txt(background, word, f_path, t_size , t_color, t_cood,t_pad):
    # フォント設定
    font = ImageFont.truetype(f_path, t_size)
    # テキスト入力用クラス宣言
    draw = ImageDraw.Draw(background)
    # 背景に書き込み
    cnt = 0
    for y in range(t_cood[0], background.size[1]-t_cood[0], t_size+t_pad[0]):
        for x in range(t_cood[1], background_size[0]-t_cood[1], t_size+t_pad[1]):
            if len(word) > cnt:
                draw.text((x,y), word[cnt], font=font, fill=t_color)
            else:
                break
            cnt += 1
    return background


if __name__ == "__main__":
    # 背景作成
    background_size = (320,240)
    background_color = (0,0,0,255)
    background = Image.new('RGBA', background_size, background_color)
    #テキスト指定
    word = str(np.genfromtxt('word.txt', delimiter=',', dtype=np.str))
    font_path = '/System/Library/Fonts/ヒラギノ角ゴシック W4.ttc'
    text_size = 20
    text_color = (180,180,180,255)
    #y,x
    text_coordinate = (20,20)
    text_padding = (10,0)
    draw_img = draw_txt(background, word, font_path, text_size, text_color, text_coordinate, text_padding)
    #画像指定
    draw_img.show()
    #画像保存
    save_path = './text.png'
    draw_img.save(save_path)

出力結果

問題点

全角しか対応していない(やりたかったのが全角のみだったから)

参考サイト

https://pillow.readthedocs.io/en/3.1.x/reference/Image.html
https://pillow.readthedocs.io/en/5.1.x/reference/ImageFont.html
https://pillow.readthedocs.io/en/5.1.x/reference/ImageDraw.html