在Python中使用ImageDraw.Draw(image)循环会产生重叠文本

时间:2016-11-23 10:16:12

标签: 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.truetype('arial.ttf', 132)

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

2 个答案:

答案 0 :(得分:1)

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

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

这应该可以解决问题。

答案 1 :(得分:1)

我自己回答了这个问题,法比奥的想法得到了帮助。我不得不在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")