#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 ?