PythonのPillowで文字列を描画したとき、その高さと幅を取得する方法について、まとめます。
multiline_textbbox
bb = ImageDraw.Draw(im).multiline_textbbox(xy, text, font=font)
textbboxは一行のテキストで、multiline_textbboxは複数行のテキストに対応していますが、一行のテキストにも対応しているので、こちらを使えばOKです。
引数は文字を描画するtextと同じです。
戻り値は(左, 上, 右, 下)というタプルです。
サンプルコード
吾輩は
猫である
という複数行の文字列を描画し、その文字列を長方形で囲みます。
from PIL import Image, ImageDraw, ImageFont
im = Image.new("RGB", (400, 225), "white")
draw = ImageDraw.Draw(im)
font_file = "../../pillow/font/rounded-mgenplus-1cp-regular.ttf"
font_size = 70
font = ImageFont.truetype(font_file, font_size)
xy = (0, 0)
text = "吾輩は\n猫である"
draw.text(xy, text, fill="black", font=font)
bb = ImageDraw.Draw(im).multiline_textbbox(xy, text, font=font)
print(bb)
draw.rectangle(((bb[0], bb[1]), (bb[2], bb[3])), fill=None, outline="red", width=1)
im.show()
im = Image.new("RGB", (400, 225), "white")
draw = ImageDraw.Draw(im)
font_file = "../../pillow/font/rounded-mgenplus-1cp-regular.ttf"
font_size = 70
font = ImageFont.truetype(font_file, font_size)
xy = (0, 0)
text = "吾輩は\n猫である"
draw.text(xy, text, fill="black", font=font)
bb = ImageDraw.Draw(im).multiline_textbbox(xy, text, font=font)
print(bb)
draw.rectangle(((bb[0], bb[1]), (bb[2], bb[3])), fill=None, outline="red", width=1)
im.show()
コメント