PIL图像调整大小会在不期望的情况下压缩图像

时间:2015-10-23 15:07:41

标签: python django python-imaging-library

我有以下带有覆盖保存方法的Django模型:

class Photo(models.Model):
    image = models.ImageField(upload_to=get_file_path, blank=False, null=False)

    def save(self, *args, **kwargs):
        """
        Override save method to resize uploaded photo images to max_size.
        """
        if not self.id and not self.image:
            return

        super(Photo, self).save(*args, **kwargs)

        resized_image = Image.open(self.image)
        resized_image = resized_image.resize(settings.PHOTO_CONFIG['max_size'], Image.ANTIALIAS)
        resized_image.save(self.image.path)

以及settings.py中的以下配置:

PHOTO_CONFIG = {
    'max_size': (900, 900),
}

现在,当我上传完全900x900大小(500 kb)的JPG时,上传的一个压缩到大约100kb。两者都是900x900和72 dpi分辨率。

这是如何以及为何发生的?

1 个答案:

答案 0 :(得分:1)

可能有几个原因,但简而言之,可能是因为默认的保存参数不是用于创建原始图像的参数。

值得注意的是:

  • 原始图像的创建质量更高。枕头的默认质量是75(它可以从1到95(最好))。较低的质量有时会减小尺寸。
  • 原始图像具有EXIF数据(例如来自相机)或ICC配置文件。默认情况下,Pillow不保存任何EXIF数据或ICC配置文件。

请参阅the complete list of options of the save method for JPEG file及其默认值,您应该知道哪种情况与您的情况不同。