【问题标题】:How to store an image in a variable如何将图像存储在变量中
【发布时间】:2011-07-15 22:36:54
【问题描述】:

我想将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() 从命令行执行时什么都不做

【问题讨论】:

    标签: python html image matplotlib


    【解决方案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
    

    【讨论】:

    • 谢谢..这有帮助...我希望有一种方法可以直接获取图像而不是使用文件句柄..
    • @Ramya:StringIO 不使用文件句柄。它都是内存存储,对 StringIO 实例的数量没有操作系统限制:stackoverflow.com/questions/1177230/…
    • 不要忘记在解码之前取消引用字符串,因为由于 url 编码,我得到了一些“不正确的填充”错误。
    • 仅供参考,在 Python 3 中,您需要使用 io.BytesIO,例如:buf = io.BytesIO(); plt.gcf().savefig(buf, format='png'); buf.seek(0); return base64.b64encode(buf.read())
    • 我有一个二维矩阵,而不是绘图。如何将其作为 JPG 图像数据作为变量返回?我希望imsave 有一个“返回”的选项。
    【解决方案2】:

    完整的python 3 版本,将Paul's answermetaperture's comment 放在一起。

    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
    

    【讨论】:

    • 嗨,有什么办法可以绕过很长的网址吗?
    猜你喜欢
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    相关资源
    最近更新 更多