在Python中使用ImageDraw.Draw(图像)循环会导致覆盖文本

在Python中使用ImageDraw.Draw(图像)循环会导致覆盖文本,python,pillow,Python,Pillow,执行以下代码时,第一个输出文件工作正常,但第二个输出文件从列表中的第一项和第二项中提取文本。每次迭代文本都会继续累积。但是,文件名很好,不会累积 def write_text_to_image(names_list): from PIL import Image, ImageDraw, ImageFont image = Image.open("t.bmp") draw = ImageDraw.Draw(image) font = ImageFont.truet

执行以下代码时,第一个输出文件工作正常,但第二个输出文件从列表中的第一项和第二项中提取文本。每次迭代文本都会继续累积。但是,文件名很好,不会累积

def write_text_to_image(names_list):
    from PIL import Image, ImageDraw, ImageFont
    image = Image.open("t.bmp")
    draw = ImageDraw.Draw(image) 
    font = ImageFont.truetype('arial.ttf', 132)

    for name in names_list:
        draw.text((150, 905), name, font = font, fill = (0, 0, 0))
        image.save(name + ".bmp")

我没有试过,但看着你的代码,我认为必须在每次交互中重新创建对象
draw

for name in names_list:
    draw = ImageDraw.Draw(image)
    ...

这应该可以解决问题。

我自己回答了这个问题,法比奥的想法帮助了我。我必须在for循环中移动图像分配

def write_text_to_image(names_list):
    from PIL import Image, ImageDraw, ImageFont
    font = ImageFont.truetype('arial.ttf', 132)

    for name in names_list:
        image = Image.open("t.bmp")
        draw = ImageDraw.Draw(image) 
        draw.text((150, 905), name, font = font, fill = (0, 0, 0))
        image.save(name + ".bmp")

谢谢你的回复。不幸的是,我将代码行移到了循环中,它仍然在做同样的事情。