python - 模型保存方法。保存前调整图像大小

标签 python django django-models python-imaging-library

我正在尝试在保存图像之前调整图像大小。我在模型上使用自定义保存方法,但遇到了障碍。

这是我现在的代码:

class UserImages(models.Model):
    height = models.CharField(blank=True, max_length=100)
    width = models.CharField(blank=True, max_length=100)
    image = models.ImageField(upload_to="UserImages/%Y/%m/%d", height_field='height', width_field='width')
    owner = models.ForeignKey(User)

    def __unicode__(self):
        return str(self.image)
    def save(self, *args, **kwargs):
        if self.image:
            filename = str(self.image.path)
            img = Image.open(filename)

            if img.mode not in ('L', 'RGB'):
                img = img.convert('RGB')

            img = ImageOps.fit(img, (180,240), Image.ANTIALIAS, 0, (0.5, 0.5))
            img.save(self.image.path)
        super(UserImages, self).save(*args, **kwargs)

此操作失败并告诉我找不到该文件。据我所知,这与到目前为止图像只存在于内存中,因此无法像这样打开有关。

所以我的问题是:如何从内存中打开图像并将其保存回内存,以便默认保存方法可以用它来完成它的任务?

非常感谢您的帮助,这让我陷入困境:)

最佳答案

在尝试访问其 ImageField 之前,您需要保存您的 UserImages

可以在此代码段中找到如何执行此操作的示例:

基本上:

super(UserImages, self).save()
PS。您的模型应该有一个单一的名称,例如UserImage 而不是 UserImages

关于python - 模型保存方法。保存前调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3667890/

相关文章:

python - 比较 Pandas Dataframe 的匹配行和列的差异

python - Flask 应用程序中的数据未提交到数据库

javascript - 克隆一个 div 并更改克隆 div 的所有元素的 id

django - 模型和权限

Python urllib2 : How to eliminate urllib2 add it's own headers

python - 用 pandas 读取加密的 excel

django - IndexMissingException - 带 Elasticsearch 的 django haystack

django - 为什么模型字段验证发生在 validate 或 validate_<field> 被调用之前?

python - 从 Django 获取多个随机对象时,查询集如何工作?

python - 在 Django Admin 中使字段唯一