Как перезаписать переменную из cleaned_data

#python #django #django-views

Вопрос:

Я хотел знать, как я могу сохранить фотографию, которая будет содержать водяной знак. В настоящее время берет фотографию из формы и создает на ней водяной знак, но сохраняет ее отдельно. Точнее, я хотел бы, чтобы фотография, которую я отправляю в форме, была обработана и сохранена.

     if request.method == 'POST':
        form_w = ImageForm(request.POST, request.FILES)
        if form_w.is_valid():
            form = form_w.save(commit=False)
            cd = form_w.cleaned_data['img']
            im = Image.open(cd)
            width, height = im.size

            draw = ImageDraw.Draw(im)
            text = "TEST WATERMARK"

            font = ImageFont.truetype('arial.ttf', 36)
            textwidth, textheight = draw.textsize(text, font)


            margin = 10
            x = width - textwidth - margin
            y = height - textheight - margin


            draw.text((x, y), text, font=font)

            im.save('Luki/media/upload_p/{}'.format(cd))

            form.save()

            return redirect('Luki:gallery')
    else:
        form = ImageForm()
    return render(request, 'Luki/upload_img.html', {
        'form': form,

    })
 

Комментарии:

1. Какую именно обработку вы хотите выполнить? Для того, чтобы сохранить изображение, вы можете создать отдельный метод.

2. хочет обработать изображение, отправляемое формой. Я отправляю изображение some_image.jpg затем добавляется водяной знак, и он сохраняется как some_image.jpg.

Ответ №1:

Используйте ‘form.instance.save () «вместо» form.save ()», поскольку экземпляр-это объект, ограниченный формой

Комментарии:

1. Пробовал использовать form.img.save() , но все еще не знаю, как загрузить туда фотографию с водяными знаками

2. форма.экземпляр.сохранить()

3. тогда у меня есть сообщение 'ImageModel' object has no attribute 'instance'

4. form_w.экземпляр.сохранить()

5. Это так не работает. Мне нужно как-то загрузить фотографию после звонка im.save('Luki/media/upload_p/{}'. Format (cd)) , когда я использую form_w.instance.save() ее, она сохраняет изображение, но оригинал из формы, а не с водяными знаками

Ответ №2:

Сохраненный файл, который я назначил img = Image.open(('Luki/media/upload_p/{}'.format(cd))) переменной, имеет этот формат <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1920x1080 at 0x5823C10> . Я могу как-то преобразовать его, чтобы его можно было прочитать как photo.jpg ?