对ImageField进行子类化以压缩图像

时间:2014-07-31 09:36:58

标签: django django-models

我尝试将ImageField子类化以添加压缩支持。这是我目前的代码。

(现在我假设文件将是PNG)。

from django.utils.six import with_metaclass, string_types
from django.core.files.images import ImageFile


class CompressImageField(with_metaclass(models.SubfieldBase, models.ImageField)):
    """
    Compress image files on upload-field
    """
    def to_python(self, value):
        value = super(CompressImageField, self).to_python(value)
        if isinstance(value, ImageFile):
            im = Image.open(value.name)
            im.save(value.name, optimize=True, quality=100)
            return ImageFile(value.name)
        return value

但是,数据库中存储的内容只是u''

有时to_python()会收到一个unicode字符串,有时候会收到一个ImageField。我猜这是序列化部分,尽管super(CompressImageField, self).to_python(value)总是返回与value相同的类型,通常值不变。

不确定这里会发生什么。任何帮助表示赞赏。希望我已经让自己清楚了。

1 个答案:

答案 0 :(得分:1)

你可以使用已经这样做的django包。