Shatoidil
@Shatoidil

Как решить проблему с нанесением текста на изображение во FLASK?

Не могу разобраться, вроде делаю все правильно.

Есть страница с инпутом, в импут вводится текст и нажимается кнопка отправить

@application.route('/result',methods = ['POST', 'GET'])
    def result():
       if request.method == 'POST':
          if request.form.get("serial_number") != "":
             set_serial_number(request.form.get("serial_number"))
       save_image()
       path = "sts_new.png"
       return send_file(path, as_attachment=True)

метод все отлично ловит дальше мне этот текст нужно нанести на изображение.

image = Image.open('sts.png').convert("RGBA")
size = 1413, 1000
txt = Image.new('RGBA', size, (255,255,255,0))
draw = ImageDraw.Draw(txt)

    def set_serial_number(serial_number):
        (x, y) = (900, 50)
        message = serial_number
        font_serial = ImageFont.truetype('2057.ttf', size=43)
        draw.text((x, y), message, fill=(200, 0, 0, 255), font=font_serial)

Затем сохраняется..

def save_image():
        combined = Image.alpha_composite(image, txt)
        combined.save('sts_new.png')

Все отлично. Все работает. затем я обновляю страничку и опять ввожу текст жму кнопку отправит и получаю наложение предыдущего введенного текста с новым. как-то вот так. введите сюда описание изображения

Я не могу понять, откуда он берет предыдущее изображение? sts_new.png - файл удалял даже при обновлении страницы, но все равно он где то его держит. Как мне решить эту проблему?

ссылка на гист https://gist.github.com/Shatoidil/22a4d5d851352653...
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
Andrew_Pinkerton
@Andrew_Pinkerton Куратор тега Python
Backend-разработчик
А так?
with Image.open('sts.png').convert("RGBA") as your_image:
    do_things(your_image)


UPD: переписал ваш код, попробуйте так

def draw_text_on_image(text,
                       input_file='image.png',
                       output_file='new_image.png',
                       dimensions=(1047, 377),
                       insert_position=(900, 50),
                       ):

    with Image.open(input_file).convert("RGBA") as your_image:
        temporary_image = Image.new('RGBA', dimensions, (255, 255, 255, 0))
        draw = ImageDraw.Draw(temporary_image)

        draw.text(insert_position, text, fill=(200, 0, 0, 255))
        del draw
        output = Image.alpha_composite(your_image, temporary_image)
        output.save(output_file)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы