我之前问了一个关于pillow的相关问题。
Python Pillow: Make image progressive before sending to 3rd party server
只是扩展一下,当我上传图像并将其存储在服务器上时,我如何在图像中实现progressiveness?
Models.py
class Blog(models.Model):
banner = models.FileField("banner", upload_to='blog_banner', help_text='Upload blog banner', blank=True, null=True)Forms.py
def clean(self):
data = self.cleaned_data
banner = data['banner']
# Check and make banner image progressive
if not Utils.is_progressive_img(banner):
data['banner'] = Utils.make_progressive_img(banner)渐进法
img = Image.open(source)
progressive_img = StringIO()
img.save(progressive_img, "JPEG", quality=80, optimize=True, progressive=True)在forms.py中,当我保存博客帖子时,我看到以下错误,我知道这是由于StringIO()的格式造成的
错误
AttributeError at /blog/create/
StringIO instance has no attribute '_committed'发布于 2015-08-03 01:30:33
下面是我在forms.py中使用的解决方案
forms.py
def clean(self):
data = self.cleaned_data
banner = data['banner']
# Blog banner has been changed, Check for if the new image is progressive?
if self.instance.banner != banner and Utils.is_progressive_img(banner) is False:
progressive_banner = Utils.make_progressive_img(img=banner, method=2)
data['banner'].file = progressive_banner
return data您需要更新Django FileField的.file属性
models.py
class Blog(models.Model):
banner = models.FileField("banner", upload_to='blog_banner', help_text='Upload blog banner', blank=True, null=True)更新
在model.save()中实现相同的逻辑
if Utils.is_progressive_img(self.banner) is False:
progressive_banner = Utils.make_progressive_img(img=self.banner, method=2)
name = self.banner.name
# Delete the current image & Add the new progressive image.
self.banner.delete(save=False)
self.banner.save(name,content=ContentFile(progressive_banner.getvalue()), save=False)https://stackoverflow.com/questions/31770063
复制相似问题