【发布时间】:2021-01-05 16:43:34
【问题描述】:
我有flask api响应图片:
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' 是正确的,我可以得到正确的调整大小图像,但响应是黑色的,原因是图像包含错误。
【问题讨论】:
-
如果
result[0]是image/jpeg,则不能将其传递给im.save()的format参数。那应该是jpg,而不是image/jpeg。 -
@Mark Setchell 我直接给出格式。如果 im.save() 没有格式,它取决于扩展名。如果给出格式,则取决于格式我直接使用FORMAT字典给出格式'JPEG'。
标签: image flask file-io python-imaging-library