Matplotlib图形图像转换为base64

5fjcxozz  于 2023-02-05  发布在  其他
关注(0)|答案(3)|浏览(231)

**问题:**需要将matplotlib的图形图像转换为base64图像
**当前解决方案:**将matplot图像保存在缓存文件夹中,使用read()方法读取,然后转换为base64
**新问题:烦恼:**需要一个变通方案,这样我就不需要将图形作为图像保存在任何文件夹中。我只想使用内存中的图像。做不必要的I/O是一个不好的做法。

def save_single_graphic_data(data, y_label="Loss", x_label="Epochs", save_as="data.png"):
    total_epochs = len(data)
    plt.figure()
    plt.clf()

    plt.plot(total_epochs, data)

    ax = plt.gca()
    ax.ticklabel_format(useOffset=False)

    plt.ylabel(y_label)
    plt.xlabel(x_label)

    if save_as is not None:
        plt.savefig(save_as)

    plt.savefig("cache/cached1.png")

    cached_img = open("cache/cached1.png")

    cached_img_b64 = base64.b64encode(cached_img.read())

    os.remove("cache/cached1.png")

    return cached_img_b64
szqfcxe2

szqfcxe21#

import cStringIO
my_stringIObytes = cStringIO.StringIO()
plt.savefig(my_stringIObytes, format='jpg')
my_stringIObytes.seek(0)
my_base64_jpgData = base64.b64encode(my_stringIObytes.read())

[编辑]在python3中应该是

import io
my_stringIObytes = io.BytesIO()
plt.savefig(my_stringIObytes, format='jpg')
my_stringIObytes.seek(0)
my_base64_jpgData = base64.b64encode(my_stringIObytes.read()).decode()

我认为至少...根据文档http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.savefig

kknvjkwl

kknvjkwl2#

对于python 3

import base64
import io 
pic_IObytes = io.BytesIO()
plt.savefig(pic_IObytes,  format='png')
pic_IObytes.seek(0)
pic_hash = base64.b64encode(pic_IObytes.read())

原因是cStringIOcStringIO.StringIO()都已弃用

kfgdxczn

kfgdxczn3#

我无法得到答案以上的工作,但这做到了:

import io
    import base64
    s = io.BytesIO()
    plt.plot(list(range(100)))
    plt.savefig(s, format='png', bbox_inches="tight")
    plt.close()
    s = base64.b64encode(s.getvalue()).decode("utf-8").replace("\n", "")
    return '<img align="left" src="data:image/png;base64,%s">' % s

相关问题