matplotlib 图像到 base64 而不保存

matplotlib image to base64 without saving

我正在用这段代码创建一个词云图像。

       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)

If I just did this, would this accomplish my task?

data = base64.b64encode(wordcloud)

没有。您需要“保存”图像,获取字节流,并将 that 编码为 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()