Pillowで文字列の範囲を取得する方法

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()

コメント

タイトルとURLをコピーしました