将jpeg字符串转换为PIL图像对象

时间:2015-08-07 17:25:51

标签: python jpeg python-imaging-library

我已经从应用程序的后端传递了一个文件列表,这些文件应该是jpeg文件。然而,对于我的生活,我无法将它们转换为PIL图像对象。当我打电话

str(curimg)

我回来了:

<type 'str'>

。我已经尝试过使用open(),. read,io.BytesIO(img.read()并且对它没有任何作用,但它一直把它看作一个字符串。当我打印字符串时,我会得到无法识别的字符。有没有人知道如何告诉python如何将此字符串作为jpeg进行解释并将其转换为丸图像,我可以在其中调用.size和np.array?

3 个答案:

答案 0 :(得分:12)

同样的事情,但更简单

from PIL import Image
import io
Image.open(io.BytesIO(image))

注意:

如果图片在网上;你需要先下载它。

import requests
image = requests.get(image_url).content  #download image from web

然后将其传递给io模块。

io.BytesIO(image)

如果图像在你的高清;你可以直接用PIL打开。

Image.open('image_file.jpg')  #image in your HD

答案 1 :(得分:11)

您应该能够将StringIO对象传递给PIL并以这种方式打开它。

即:

from PIL import Image
import StringIO
tempBuff = StringIO.StringIO()
tempBuff.write(curimg)
tempBuff.seek(0) #need to jump back to the beginning before handing it off to PIL
Image.open(tempBuff)

答案 2 :(得分:1)

对我来说,上述解决方案都没有奏效。

我终于设法正确读取字符串:

from PIL import Image
img = Image.frombytes('RGB', (640, 480), img_str, 'raw')

要测试它,您可以执行类似

的操作
image = Image.open("some.png")
print(image.mode, image.size) # OUT: 'RGB' (640, 480)
image = Image.frombytes('RGB', (640, 480), image.tobytes(), 'raw')
image.show()