因textsize弃用改用PIL ImageDraw.textbbox却遇报错问题
解决ImageDraw.textbbox()参数错误的问题
错误原因
ImageDraw.textbbox()的参数规则和你之前用的textsize完全不同:
textsize的参数顺序是(text, font=...)- 但
textbbox要求第一个参数必须是基准坐标(比如(0,0)),第二个参数才是要计算的文本内容,而且它返回的是一个包含四个值的元组:(left, top, right, bottom),不是你之前写的两个值。
你的代码里直接把text放在第一个参数位置,导致函数认为缺少必填的text参数,所以抛出TypeError。
修正后的代码
from PIL import Image, ImageDraw, ImageFont # 创建图像对象 img = Image.new("RGB", (400, 400), (255, 255, 255)) # 创建绘图对象 draw = ImageDraw.Draw(img) # 定义字体 font = ImageFont.truetype("arial.ttf", 36) text = "Hello World!" # 调用textbbox:第一个参数是基准坐标,第二个是文本 bbox = draw.textbbox((0, 0), text, font=font) # 从返回的边界框计算宽度和高度 textwidth = bbox[2] - bbox[0] textheight = bbox[3] - bbox[1] # 计算文本居中位置 x = (img.width - textwidth) / 2 y = (img.height - textheight) / 2 # 绘制文本 draw.text((x, y), text, (0, 0, 0), font=font) # 保存图像 img.save("hello_world.png")
关键说明
draw.textbbox((0,0), text, font=font):这里的(0,0)是计算边界框的基准点,不影响最终文本的绘制位置,只是用来确定文本相对于该点的边界范围。- 从返回的
bbox元组中,通过right-left得到文本宽度,bottom-top得到文本高度,这和textsize返回的(width, height)效果一致。
内容的提问来源于stack exchange,提问作者user3928808
相关产品推荐
相关产品推荐

