如何解决flask return pil 生成图像错误,我可以看到调整大小的图片,但响应图像是错误的
FORMAT = {'image/jpeg':'JPEG','image/bmp':'BMP','image/png':'PNG','image/gif': 'GIF'}
@app.route('/api/image/<id>/<str_size>',methods=['get'])
def show_thumbnail(id,str_size):
size = int(str_size)
with get_db().cursor() as cur:
cur.callproc('getimage',(id,))
result = cur.fetchone()
buf = BytesIO(result[1])
if(size>0):
im = Image.open(buf)
im.thumbnail((size,size))
buf = BytesIO(b'')
im.save(buf,format=FORMAT[result[0].lower()])
fw = open('w03.jpg','wb')
fw.write(buf.getbuffer())
fw.close()
resp = Response(buf)
resp.headers.set('Content-Type',result[0].lower())
return resp
ps:
结果[0] = '图像/jpeg'
result[1] 是 jpeg 图片的字节数组。
如果我设置 size(str_size) = 0,我的意思是我不运行 PIL Image 缩略图代码部分。我可以得到正确的图片作为回应。
例如,如果我设置 size(str_size) = 256,我发现 'w03.jpg' 是正确的,我可以获得正确的调整大小图像,但响应是黑色的,因为图像包含错误。
解决方法
im.save(buf)
将缓冲区放到最后。您需要在构建 resp
之前倒带此操作,请使用 buf.seek(0)
执行此操作。我怀疑 buf.getbuffer
不会以同样的方式改变流位置,这可以解释为什么 w03.jpg
在第二个测试中是正确的:
您还可以使用 with
块来最小化一些代码(这会自动关闭文件):
# ...
with open('w03.jpg','wb') as fw:
fw.write(buf.getbuffer())
buf.seek(0)
resp = Response(buf)
# ...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。