Python 尝试使用图像创建JSON响应时出现StringIO问题
我试图在Django中发送一个JSON响应,其中包括python的matplotlib中.png图形的base64字符串表示形式以及一些关于它的文本信息。我在尝试将图像转换为base64字符串时遇到一些问题:Python 尝试使用图像创建JSON响应时出现StringIO问题,python,django,json,matplotlib,Python,Django,Json,Matplotlib,我试图在Django中发送一个JSON响应,其中包括python的matplotlib中.png图形的base64字符串表示形式以及一些关于它的文本信息。我在尝试将图像转换为base64字符串时遇到一些问题: # Initialize objects imma need img_buffer = StringIO.StringIO() out = StringIO.StringIO() canvas = FigureCanvasAgg(fig) # Pr
# Initialize objects imma need
img_buffer = StringIO.StringIO()
out = StringIO.StringIO()
canvas = FigureCanvasAgg(fig)
# Print and convert
canvas.print_png(img_buffer)
base64.encode(img_buffer, out)
img_str = out.getvalue()
# Make dictionary
logger.info(img_str)
resp_d = {'image': img_str, 'nodes': str(pxs)}
return HttpResponse(json.dumps(resp_d), content_type='application/json')
注意:fig是我的matplotlibFigure()
,我已将其直接打印到响应中并显示出来,因此我知道它是正确创建的
不幸的是,我没有得到一个图像,记录器显示img_str是空的。我环顾四周,尝试了一些方法,包括使用fig.savefig(img\u buffer)
而不是canvas.print\u png(img\u buffer)
,但没有成功。我完全被难住了。。。你知道会发生什么吗?非常感谢 问题是
canvas.print_png(img_buffer)
将文件指针保留在“file”的末尾,因此img\u buffer.read()
返回一个空字符串。您可以在调用canvas.print\u png(img\u buffer)
后立即调用img\u buffer.seek(0)
,但实际上,您的out
变量不是必需的。取而代之的是:
base64.encode(img_buffer, out)
img_str = out.getvalue()
与:
或者,由于base64.encodestring是旧接口的一部分,因此最好使用:
img_str = base64.b64encode(s.getvalue())
运气不好:StringIO和cStringIO都会导致一个空字符串。您将从
img_str
更改为img_raw_str
,这是您的原始代码吗?呜呜声,输入错误。。。编辑。
img_str = base64.b64encode(s.getvalue())