我喜欢在最终存储之前调整上传图像(ImageField)的大小,我听说python有一个名为PIL的图像库,我想用它做那个任务,但我不知道如何开始。
有关如何操作的任何建议吗?
由于
答案 0 :(得分:0)
您可以覆盖模型的保存功能,您可以在其中打开文件并调整其大小(不推荐,因为每次保存模型时都会调整大小),文件上传后调整大小(例如在form.save()之前/期间)
但恕我直言,更好的解决方案是使用专用的应用程序,我最喜欢的是sorl-thumbnails
答案 1 :(得分:0)
我刚刚发现了如何做到但是有没有办法简化它?我是python和django的新手,所以我不确定这是否是正确的方法。
下面是我的代码:
from django.db.models.signals import pre_delete, pre_save
def on_save_image(sender, **kwargs):
import PIL
obj = kwargs['instance']
if obj.file:
try:
original = sender.objects.get(pk = obj.pk)
if original.file:
#if change image then delete original file
original.file.delete()
except ObjectDoesNotExist:
pass
finally:
img = PIL.Image.open(obj.file)
img.thumbnail((500, 500))
# reset pointer to start at 0 again
obj.file.open()
img.save(obj.file)
pre_save.connect(on_save_image, sender = Image)
# delete file in memory
def on_delete_image(sender, **kwargs):
obj = kwargs['instance']
if obj.file:
obj.file.delete()
pre_delete.connect(on_delete_image, sender = Image)
由于