如何通过pymongo将图片存储到MongoDB中?

Rah*_*Dev 8 binary opencv mongodb pymongo python-3.x

from PIL import Image
from bson import Binary

img = Image.open('test.jpg')
img = Binary(img)
Run Code Online (Sandbox Code Playgroud)

抛出一个错误说明TypeError : data must be an instance of bytes

为什么会出现这种情况?如何解决这个问题以将 img 存储到 MongoDB?

小智 12

只要文档不超过16MB标准bson就可以,否则应该使用gridfs。下面的示例展示了如何插入图像以及如何从 mongodb 读回图像。

插入图像.py

from pymongo import MongoClient
from PIL import Image
import io

client = MongoClient()
db = client.testdb
images = db.images

im = Image.open("./image.jpg")

image_bytes = io.BytesIO()
im.save(image_bytes, format='JPEG')

image = {
    'data': image_bytes.getvalue()
}

image_id = images.insert_one(image).inserted_id
Run Code Online (Sandbox Code Playgroud)

读取图像.py

from pymongo import MongoClient
from bson.binary import Binary
from PIL import Image
import io
import matplotlib.pyplot as plt

client = MongoClient()
db = client.testdb
images = db.images
image = images.find_one()

pil_img = Image.open(io.BytesIO(image['data']))
plt.imshow(pil_img)
plt.show()
Run Code Online (Sandbox Code Playgroud)