У меня есть модель, которая содержит поле ImageField
, и я хочу изменить размер предоставленного изображения, если его размеры слишком велики (более 600x600).Мой сигнал выглядит следующим образом:
from django.conf import settings
from django.db.models.signals import pre_save
from PIL import Image
def resize_profile_picture(sender, instance, **kwargs):
img = Image.open(instance.profile_picture)
print(img.__dict__['_size'])
if any([img.width > settings.MAX_PROFILE_PICTURE_WIDTH, img.height > settings.MAX_PROFILE_PICTURE_HEIGHT]):
img.thumbnail(settings.MAX_PROFILE_PICTURE_DIMENSIONS)
print(img.__dict__['_size'])
pre_save.connect(resize_profile_picture, sender=get_user_model())
Эти отпечатки показывают, что на самом деле размер изображения изменяется с (645, 374) до (600, 347), но проблема в том, что этот эскиз не отображаетсясохранено и у меня еще есть картинка в оригинальном размере.Поскольку thumbnail
работает с той же картинкой, на которой вызывается, я не могу найти причину, по которой он не работает, потому что согласно документации thumbnail
возвращает NoneType, поэтому, насколько я понимаю, я не могу сохранить измененнуюсфотографируйте или верните его (но я все же попытался, не повезло).