Matplotlib - хранить изображение в переменной
Я хотел бы сохранить изображение, сгенерированное matplotlib, в переменной raw_data, чтобы использовать его как встроенное изображение.
import os
import sys
os.environ['MPLCONFIGDIR'] = '/tmp/'
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
print "Content-type: image/png\n"
plt.plot(range(10, 20))
raw_data = plt.show()
if raw_data:
uri = 'data:image/png;base64,' + urllib.quote(base64.b64encode(raw_data))
print '<img src = "%s"/>' % uri
else:
print "No data"
#plt.savefig(sys.stdout, format='png')
Ни одна из функций не подходит для моего использования:
- plt.savefig(sys.stdout, format = 'png') - Записывает его в stdout. Это помогает.. поскольку я должен встроить изображение в html файл.
- plt.show()/plt.draw() ничего не делает при выполнении из командной строки
Ответы
Ответ 1
Вы пробовали cStringIO
или эквивалент?
import os
import sys
import matplotlib
import matplotlib.pyplot as plt
import StringIO
import urllib, base64
plt.plot(range(10, 20))
fig = plt.gcf()
imgdata = StringIO.StringIO()
fig.savefig(imgdata, format='png')
imgdata.seek(0) # rewind the data
print "Content-type: image/png\n"
uri = 'data:image/png;base64,' + urllib.quote(base64.b64encode(imgdata.buf))
print '<img src = "%s"/>' % uri
Ответ 2
Завершите версию python 3, вставив ответ Paul и комментарий метапертуры.
import matplotlib.pyplot as plt
import io
import urllib, base64
plt.plot(range(10))
fig = plt.gcf()
buf = io.BytesIO()
fig.savefig(buf, format='png')
buf.seek(0)
string = base64.b64encode(buf.read())
uri = 'data:image/png;base64,' + urllib.parse.quote(string)
html = '<img src = "%s"/>' % uri