0

我喜欢在最终存储之前调整上传的图像(ImageField)的大小,我听说 python 有一个名为 PIL 的图像库,我想用它来完成这项任务,但我不确定如何开始。

关于如何做的任何建议?

谢谢

4

2 回答 2

0

您可以覆盖模型的保存功能,您可以在其中打开文件并调整其大小(不推荐,因为每次保存模型时都会调整大小),您可以在文件上传后调整大小(例如,在 form.save() 之前/期间)

但恕我直言,更好的解决方案是为此使用专用应用程序,我最喜欢的是sorl-thumbnails

于 2011-03-23T07:39:23.483 回答
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)

谢谢

于 2011-03-23T07:40:28.523 回答