django アプリで matplotlib を使用しており、レンダリングされた画像を直接返したいと考えています。これまでのところplt.savefig(...)
、画像の場所を返すことができます。
私がやりたいことは次のとおりです。
return HttpResponse(plt.renderfig(...), mimetype="image/png")
何か案は?
django アプリで matplotlib を使用しており、レンダリングされた画像を直接返したいと考えています。これまでのところplt.savefig(...)
、画像の場所を返すことができます。
私がやりたいことは次のとおりです。
return HttpResponse(plt.renderfig(...), mimetype="image/png")
何か案は?
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
。
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
ダックタイピングを採用し、ファイルオブジェクトを装って独自のオブジェクトを渡します
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")