Nil*_*Kar 5 django django-models django-imagekit django-rest-framework
在我的模型中,我想通过覆盖保存方法来格式化图像字段
我在我的模型中做到了这一点
from PIL import Image as Img
from io import StringIO
from django.core.files.uploadedfile import InMemoryUploadedFile
class Blog(models.Model):
Blog_image= models.ImageField(upload_to="...", blank=True)
def save(self, *args, **kwargs):
if self.Blog_image:
image = Img.open(StringIO.StringIO(self.Blog_image.read()))
image.thumbnail((900,300), Img.ANTIALIAS)
output = StringIO.StringIO()
image.save(output, format='JPEG', quality=150)
output.seek(0)
self.Blog_image = InMemoryUploadedFile(output,'ImageField', "%s.jpg" %self.Blog_image.name, 'image/jpeg', output.len, None)
super(Blog, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
但是得到这个属性错误
AttributeError : type object '_io.StringIO' has no attribute 'StringIO'
Run Code Online (Sandbox Code Playgroud)
谁能解释我为什么会收到这个错误???
我的python版本是3.6.4
我的 Django 版本是 2.0.7
得到了解决方案
from PIL import Image
from io import BytesIO
from django.core.files.uploadedfile import InMemoryUploadedFile
import sys
def save(self, *args, **kwargs):
imageTemproary = Image.open(self.Blog_image)
outputIoStream = BytesIO()
imageTemproaryResized = imageTemproary.resize( (900,300) )
imageTemproaryResized.save(outputIoStream , format='JPEG', quality=150)
outputIoStream.seek(0)
self.Blog_image = InMemoryUploadedFile(outputIoStream,'ImageField', "%s.jpg" %self.Blog_image.name.split('.')[0], 'image/jpeg', sys.getsizeof(outputIoStream), None)
super(Blog, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
使用 BytesIO 完成它并且运行良好
| 归档时间: |
|
| 查看次数: |
15917 次 |
| 最近记录: |