You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

因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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:15:42