将png文件编码为字符串而不保存到文件

时间:2016-02-10 10:30:12

标签: python string matplotlib io

我正在使用一个库函数,它将png图像作为字符串返回。 这个字符串可以写成这样的文件:

    img_string = png_print_formatter(weblogoData, weblogoFormat)
    f = file('test.png', 'w')
    f.write(img_string)
    f.close()

它也可以通过matplotlib读取,例如通过plt.imread()函数。 但是,我想将字符串转换为一种格式,我可以用来直接显示图像(无需保存到文件中)。 我知道plt.imread()以二进制模式读取文件。

Google向我推荐了字符串的encode()函数,但没有运气:

    img_string.encode('utf-8')
    ...
    UnicodeDecodeError: 'ascii' codec can't decode byte 0x89 in position 0: ordinal not in range(128)

你知道如何解决这个问题吗?我不是这方面的专家,但我确信有一个解决方案。

非常感谢和最诚挚的问候,

罗马

1 个答案:

答案 0 :(得分:1)

使用StringIO:

from cStringIO import StringIO

img_string = png_print_formatter(weblogoData, weblogoFormat)
fake_file = StringIO(img_string)
plt.imread(fake_file)

上面的代码是针对python 2.在python 3中,StringIO是io模块,你应该使用BytesIO类而不是StringIO类。