Django 生成验证码是报错

不知道为什么会说没这个属性,但是可以点出来

# 报错信息
    c_width, c_height = draw.textsize(c, font=font)
AttributeError: 'ImageDraw' object has no attribute 'textsize'

根据报错信息,看起来您正在使用Python的Pillow库(PIL)中的ImageDraw对象,并尝试使用'textsize'属性来获取文本的尺寸。然而,Pillow的ImageDraw对象实际上没有名为'textsize'的属性,这就是导致AttributeError的原因。

在Pillow中,要获取文本的尺寸,您应该使用ImageDraw对象的textsize()方法而不是属性。该方法接受文本和字体作为参数,并返回文本在给定字体下的宽度和高度。

下面是使用textsize()方法的示例代码:

from PIL import Image, ImageDraw, ImageFont

# 创建一个空白图像
image = Image.new('RGB', (100, 50), color='white')

# 创建一个ImageDraw对象
draw = ImageDraw.Draw(image)

# 设置文本和字体
text = "Hello, Pillow!"
font = ImageFont.truetype("arial.ttf", 20)  # 替换为您希望使用的字体

# 获取文本尺寸
text_width, text_height = draw.textsize(text, font=font)

# 在图像上绘制文本
x = (image.width - text_width) // 2
y = (image.height - text_height) // 2
draw.text((x, y), text, font=font, fill='black')

# 保存图像
image.save("output.png")

# 显示图像
image.show()

请确保在上述示例代码中替换"arial.ttf"为您实际使用的字体文件路径,并适当修改文本和图像尺寸。这样,您应该能够成功获取文本尺寸并在图像上绘制文本。

你Pillow的版本是10.0.0吧。在10.0.0版本,ImageDraw.textsize()和ImageDraw.multiline_textsize() 都被删除了,改用ImageDraw.textbbox(),ImageDraw.textlength()和ImageDraw.multiline_textbbox()

字体大小和偏移方法