如何将图像存储在变量中

22 投票
2 回答
25573 浏览
提问于 2025-04-16 13:44

我想把用 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') - 这个会把图片写到标准输出。这对我有帮助,因为我需要把图片嵌入到一个 HTML 文件里。
  • plt.show() / plt.draw() 在命令行执行时没有任何反应。

2 个回答

23

这是一个完整的 Python 3 版本,结合了 Paul 的回答metaperture 的评论

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
33

你有没有试过 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

撰写回答