0

Pythonのmatplotlibからの.pngグラフのbase64文字列表現とそれに関するいくつかのテキスト情報を含むJSON応答をDjangoで送信しようとしています。画像を 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 は私の matplotlibFigure()です。これを応答に直接出力して表示したので、適切に作成されていることがわかります。

残念ながら、私は画像を取得できず、ロガーは img_str が空であることを示しています。私は周りを見回して、fig.savefig(img_buffer)の代わりに使用するなど、いくつかのことを試しましたcanvas.print_png(img_buffer)が、成功しませんでした. 私は完全に困惑しています...何が起こっているのでしょうか?本当にありがとう!

4

1 に答える 1

1

問題は

canvas.print_png(img_buffer)

「ファイル」の末尾にファイル ポインタを残すためimg_buffer.read()、空の文字列を返します。img_buffer.seek(0)を呼び出した直後に呼び出すこともできますcanvas.print_png(img_buffer)が、実際にはout変数は必要ありません。代わりに、これを置き換えます。

base64.encode(img_buffer, out)
img_str = out.getvalue()

と:

img_str = base64.encodestring(img_buffer.getvalue())

または、base64.encodestring は従来のインターフェースの一部であるため、以下を使用する方がよい場合があります。

img_str = base64.b64encode(s.getvalue())
于 2013-02-25T03:52:44.707 に答える