我尝试将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
相同的类型,通常值不变。
不确定这里会发生什么。任何帮助表示赞赏。希望我已经让自己清楚了。