显示存储在MongoDB中的PNG二进制文件的图像

时间:2017-02-26 16:09:43

标签: python mongodb pymongo bytestream

我有一个看起来像这样的mongodb集合:

{
 u'_id': u'someid',
 u'files': {u'screenshot': Binary('\x89PNG\r\n\x1a\n\...', 0)}
}

屏幕截图是二进制格式,我想显示它。 我怎么能在python中做到这一点?

我已经用pymongo建立了与数据库的连接,但我不知道如何解码字节流。请记住,我没有创建此数据库,我只能访问它。

2 个答案:

答案 0 :(得分:2)

可以使用例如Pillow

import sys
from cStringIO import StringIO

from bson.binary import Binary
from pymongo import MongoClient
from PIL import Image

data = open(sys.argv[1], 'rb').read()

client = MongoClient()
db = client.so
db['images'].remove()
db['images'].insert({'id': 1, 'img': Binary(data)})

for rec in db['images'].find():
    im = Image.open(StringIO(rec['img']))
    im.show()

此脚本将PNG文件作为其第一个参数,将其二进制表示插入到Mongo集合中,检索此二进制表示并最终显示图形

答案 1 :(得分:-1)

有人回答了这个问题然后删除了他的答案,我不知道为什么他删除了它,因为它帮助了我。以下两行是他的贡献:

with open('output.png', 'wb') as f:
    f.write(item[u'files'][u'screenshot'])

然后我使用Tkinter显示图像:

from Tkinter import *
root = Tk()

topFrame = Frame(root)
topFrame.pack()

screenshot = PhotoImage(file="output.png")
label_screenshot = Label(topFrame, image=screenshot)
label_screenshot.pack()

root.mainloop()