Django 图像保存

Django image saving

我想知道在 Django 中将图像保存到 ImageField 中的最佳做法是什么?

class Image(models.Model):
    image = ...

    def save(self, *args, **kwargs):
        ... # resizing and saving the image
        super().save(*args, **kwargs)

我想保存图片但不是原始尺寸。我只想保存调整大小的图像。据我所知,这里的super save方法另外将原始图像保存到数据库中。但我希望它只保存调整大小以防止数据溢出。怎么做?

您可以通过以下方式进行 我会把函数放在这里,但是你可以把它们放在另一个文件中以重用它们然后导入它们,我会添加必要的库

import PIL
from io import BytesIO
from PIL import Image
from django.core.files import File



class Image(models.Model):
    image = models.FileField()

    def save(self, *args, **kwargs):
        new_image = self.compress_images(self.image)  
    
        # asignar la nueva imagen con menor peso
        self.image = new_image
        super().save(*args, **kwargs)
   

    def valid_extension(self,_img):
        if '.jpg' in _img:
            return "JPEG"
        elif '.jpeg' in _img:
            return "JPEG"
        elif '.png' in _img:
            return "PNG"


    def compress_images(self,image):
        im = Image.open(image)
        width, height = im.size
        im = im.resize((width-50, height-50), PIL.Image.ANTIALIAS) 
        # crear a BytesIO object
        im_io = BytesIO() 
        im.save(im_io, self.valid_extension(image.name) ,optimize=True, 
        quality=70) 
        new_image = File(im_io, name=image.name)
        return new_image