Как получить объект PIL для сохранения в модель Django?

Всем привет

Делаю умный кроп, пытаюсь сохранить его в форму, но не пойму, как вытащить нужный объект.

models.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    avatar = models.ImageField(upload_to='', blank=True, null=True,)


forms.py

class Profile_Form(forms.Form):
    avatar = forms.ImageField(label='Загрузить Аватар', required=False)


views.py

Получаю данные от клиента, где мне говорят, какие размеры изображения нужно сохранить по итогу

from PIL import Image

if form.cleaned_data['avatar']:
	x = float(request.POST.get('x', ''))
	y = float(request.POST.get('y', ''))
	w = float(request.POST.get('width', ''))
	h = float(request.POST.get('height', ''))

	avatar = form.cleaned_data['avatar']

	image = Image.open(avatar)
	cropped_image = image.crop((int(x), int(y), int(w+x), int(h+y)))
	resized_image = cropped_image.resize((200, 200), Image.ANTIALIAS)
	useritem.profile.avatar = resized_image
        # На этом этапе у меня получается вот такой объект, как его свести в валидный для Django?
       #  <PIL.Image.Image image mode=RGB size=200x200 at 0x1144A70>

	useritem.profile.save(update_fields=['avatar'])
  • Вопрос задан
  • 1255 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
from io import BytesIO
from django.core.files.base import ContentFile
from PIL import Image

file_buffer = BytesIO()
resized_image.save(file_buffer, 'png')

useritem.profile.avatar.save(useritem.username + '_avatar.png', ContentFile(file_buffer.read()))
useritem.profile.save()

file_buffer.close()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы