matplotlib 图像到 base64 而不保存

问题描述

我正在使用此代码创建 wordcloud 图像。

       wordcloud = WordCloud(
            background_color='white',random_state=30,width=1500,height=1200,font_path = font_path,prefer_horizontal=1)
        wordcloud.generate_from_frequencies(frequencies=d)

我用 matplotlib 显示图像,如下所示:

        plt.imshow(wordcloud)
        plt.axis('off')
        plt.show()

我将此用作网络应用程序的一部分。我想将此图像转换为 base64 并作为字符串存储为特定实例的字典键中的值。我看到很多关于如何将图像转换为 base64 的帖子,但看起来它们涉及在编码之前将图形保存在本地。如何在不保存任何地方的情况下执行此操作,以便我可以从图像转到字符串?

这段代码看起来有点像我想要的。

import base64
from PIL import Image
from io import BytesIO

with open("image.jpg","rb") as image_file:
    data = base64.b64encode(image_file.read())

im = Image.open(BytesIO(base64.b64decode(data)))
im.save('image1.png','PNG')

如果我只是这样做,这能完成我的任务吗?

data = base64.b64encode(wordcloud)

解决方法

如果我只是这样做,这能完成我的任务吗?

data = base64.b64encode(wordcloud)

没有。您需要“保存”图像,获取该字节流,并将那个 编码为 base64。您不必将图像保存到实际文件中;您实际上可以使用缓冲区。

w = WordCloud().generate('Test')
buffer = io.BytesIO()
w.to_image().save(buffer,'png')
b64 = base64.b64encode(buffer.getvalue())

然后将其转换回来并显示图像

img = Image.open(io.BytesIO(base64.b64decode(b64)))
plt.imshow(img)
plt.show()