如何在使用 django 存储和 django rest 框架将图像上传到 Amazon s3 之前压缩图像?

How to compress images before uploading them to Amazon s3 using django storages and django rest framework?

我试图在将图像上传到 amazon s3 服务器之前压缩它们,但我做不到,我使用 'PIL' 来做,但没有成功

这是我在库中使用的代码 'PIL':

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

def compress(image):
    im = Image.open(image)
    im_io = BytesIO() 
    im.save(im_io,'PNG', quality=70) 
    new_image = File(im_io, name=image.name)
    return new_image

class MyModel(models.Model):
    file = models.FileField(blank=True, null=True, validators=[validateFileSize])

    def save(self, *args, **kwargs):
        new_image = compress(self.file)
        self.file = new_image
        super().save(*args, **kwargs)

我用下面的代码解决了

def compress(image):
        im = Image.open(image)
        # create a BytesIO object
        im_io = BytesIO() 
        # save image to BytesIO object
        #im = im.resize([500,500])
        im = im.convert("RGB")
        im = im.save(im_io,'JPEG', quality=70) 
        # create a django-friendly Files object
        new_image = File(im_io, name=image.name)
        return new_image


    class Media(models.Model):
        file = models.FileField(blank=True, null=True, validators=[validateFileSize])

        def __str__(self):
            return str(self.id)

        def save(self, *args, **kwargs):
            if self.file:
                if self.file.size > (300 * 1024):
                    # call the compress function
                    new_image = compress(self.file)
                    # set self.image to new_image
                    self.file = new_image
                    # save
            super().save(*args, **kwargs)