我有一个与Django有关的项目,我使用Pillow在某些模型中存储图像,但我希望这些图像以压缩方式存储。将图像保存到模型 ImageField 后,如何指示枕头压缩图像?
这是带有 ImageField 的模型的示例:
class Photo(models.Model):
name = models.CharField(max_length=100, null=True, blank=True, verbose_name=_("Name"))
album = models.ForeignKey(Album, on_delete=models.PROTECT, related_name='photos', verbose_name=_("Album"))
photo = models.ImageField(verbose_name=_("Photo"))
class Meta:
verbose_name = _("Photo")
verbose_name_plural =_("Photos")
def __str__(self):
return "[{}] {}".format(self.pk, self.name)
存储后,我可以看到该文件,并且它的大小与原始源文件相同。
我正在使用 Django Rest Framework 从前端获取图像。
答案 0 :(得分:1)
您可以覆盖模型的save
方法:
from PIL import Image
class Photo(models.Model):
name = models.CharField(max_length=100, null=True, blank=True, verbose_name=_("Name"))
album = models.ForeignKey(Album, on_delete=models.PROTECT, related_name='photos', verbose_name=_("Album"))
photo = models.ImageField(verbose_name=_("Photo"))
def save(self, *args, **kwargs):
instance = super(Photo, self).save(*args, **kwargs)
image = Image.open(instance.photo.path)
image.save(instance.photo.path,quality=20,optimize=True)
return instance