Python 将图像从BytesIO上载到ImageField
我想上传一个生成的图像直接在我的模型保存,而不必先保存到文件 型号: avatar=models.ImageField(上传到=“img/”,null=True,blank=True) 这是我的Python 将图像从BytesIO上载到ImageField,python,django,Python,Django,我想上传一个生成的图像直接在我的模型保存,而不必先保存到文件 型号: avatar=models.ImageField(上传到=“img/”,null=True,blank=True) 这是我的generate_avatar类 def generate(cls, size, string, filetype="JPEG"): """ Generates a squared avatar with random background color. :par
generate_avatar
类
def generate(cls, size, string, filetype="JPEG"):
"""
Generates a squared avatar with random background color.
:param size: size of the avatar, in pixels
:param string: string to be used to print text and seed the random
:param filetype: the file format of the image (i.e. JPEG, PNG)
"""
render_size = max(size, Avatar.MIN_RENDER_SIZE)
image = Image.new('RGB', (render_size, render_size),
cls._background_color(string))
draw = ImageDraw.Draw(image)
font = cls._font(render_size)
text = cls._text(string)
draw.text(cls._text_position(render_size, text, font),
text,
fill=cls.FONT_COLOR,
font=font)
stream = BytesIO()
image = image.resize((size, size), Image.ANTIALIAS)
image.save(stream, format=filetype, optimize=True)
return stream.seek(0)
但是,这不起作用,没有错误只保存0。为什么?要在django中“模拟”文件上载,请查看django的SimpleUploadedFile,并执行以下操作:
from django.core.files.uploadedfile import SimpleUploadedFile
def save(self, *args, **kwargs)
avatar = Avatar.generate(128, self.display_name, "PNG")
self.avatar = SimpleUploadedFile(avatar.name, avatar.read())
我不知道它的存在。我现在上传了,但是图像是空白的(将图像保存到文件工作),因此
返回流。seek(0)
一定不正确,也尝试了返回流SimpleUploadedFile
需要一些文件描述符。read()
尝试返回流和SimpleUploadedFile(avatar.name,avatar.read1())
如中所示
from django.core.files.uploadedfile import SimpleUploadedFile
def save(self, *args, **kwargs)
avatar = Avatar.generate(128, self.display_name, "PNG")
self.avatar = SimpleUploadedFile(avatar.name, avatar.read())