Перемещение текста опускается по одному за раз в цикле, используя PIL - PullRequest
0 голосов
/ 25 июня 2018

Я новичок в PIL.Я пытаюсь сохранить несколько изображений в цикле, чтобы изменить положение текста на каждом изображении.

Вот мой код:

from PIL import Image, ImageDraw, ImageFont
import os

files = []
C = 0
base = Image.open('car.jpg').convert('RGBA')

txt = Image.new('RGBA', base.size, (255,255,255,0))

fnt = ImageFont.truetype('calibrib.ttf', 40)
d = ImageDraw.Draw(txt)

W = 0
while C < 175:
    d.text((0,W), "Test Text", font=fnt, fill=(255,255,255,255))
    out = Image.alpha_composite(base, txt)

    f = (3-len(str(C)))*'0'+str(C)
    folder = os.getcwd()
    out.save(folder + '/images/a%s.png' % f, "PNG")
    files.append('a%s.png' % f)

    W = W+1
    C =  C+1

Вот как первое выходное изображениевыглядит так: enter image description here

Мой желаемый результат - видеть «Тестовый текст» по центру на последнем изображении вертикально.

Текст должен перемещаться ниже и ниже по одному изображению за раз в цикле.

Но вместо этого я получаю это: enter image description here

1 Ответ

0 голосов
/ 25 июня 2018

вызов ImageDraw.Draw делает txt изображением для рисования на месте, каждый раз, когда вы вызываете d.text, вы рисуете новый текст на изображении txt, не удаляя предыдущий текст из последних итераций.Чтобы это исправить, вам нужно сбрасывать объект txt на каждой итерации.Вы можете сделать это, вызвав

txt = Image.new('RGBA', base.size, (255,255,255,0))
d = ImageDraw.Draw(txt)

внутри цикла while.

...