10

django アプリで matplotlib を使用しており、レンダリングされた画像を直接返したいと考えています。これまでのところplt.savefig(...)、画像の場所を返すことができます。

私がやりたいことは次のとおりです。

return HttpResponse(plt.renderfig(...), mimetype="image/png")

何か案は?

4

4 に答える 4

18

Django のHttpResponseオブジェクトはファイルのような API をサポートしており、ファイル オブジェクトを savefig に渡すことができます。

response = HttpResponse(mimetype="image/png")
# create your image as usual, e.g. pylab.plot(...)
pylab.savefig(response, format="png")
return response

したがって、イメージを .xml で直接返すことができますHttpResponse

于 2009-07-10T13:13:05.970 に答える
6

cStringIOはどうですか?

import pylab
import cStringIO
pylab.plot([3,7,2,1])
output = cStringIO.StringIO()
pylab.savefig('test.png', dpi=75)
pylab.savefig(output, dpi=75)
print output.getvalue() == open('test.png', 'rb').read() # True
于 2009-07-10T11:12:49.490 に答える
0

ダックタイピングを採用し、ファイルオブジェクトを装って独自のオブジェクトを渡します

class MyFile(object):
    def __init__(self):
        self._data = ""
    def write(self, data):
        self._data += data

myfile = MyFile()
fig.savefig(myfile)
print myfile._data

実際のコードで代わりに myfile = StringIO.StringIO() を使用して、応答でデータを返すことができます。

output = StringIO.StringIO()
fig.savefig(output)
contents = output.getvalue()
return HttpResponse(contents , mimetype="image/png")
于 2009-07-10T11:01:13.960 に答える