Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试使用图像创建JSON响应时出现StringIO问题_Python_Django_Json_Matplotlib - Fatal编程技术网

Python 尝试使用图像创建JSON响应时出现StringIO问题

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

我试图在Django中发送一个JSON响应,其中包括python的matplotlib中.png图形的base64字符串表示形式以及一些关于它的文本信息。我在尝试将图像转换为base64字符串时遇到一些问题:

    # 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是我的matplotlib
Figure()
,我已将其直接打印到响应中并显示出来,因此我知道它是正确创建的

不幸的是,我没有得到一个图像,记录器显示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())