将memoryview类型的对象读入图像

问题描述

我正在创建一个绘图并将其作为二进制存储在数据库中。

我似乎无法正确重建图像。这是我的代码

import psycopg2 as pg
import pandas as pd
from PIL import Image
import io


query='SELECT * FROM plots_image.test'
con=pg.connect(...)
cur=con.cursor()
cur.execute(query)
#cur.fetchall()[0][0] would return a memoryview
image_data=cur.fetchall()[0][0].tobytes()
cur.close()
con.close()

bytes_image=io.BytesIO(image_data)
bytes_image.seek(0)

reconstructed_image = Image.open(bytes_image)

要创建以二进制形式存储的图像,请使用以下代码

import io
from PIL import Image
import pandas as pd
import matplotlib.pyplot as plt


df=pd.DataFrame({'A':[1,2,3],'B':[1,'C':[2,4,6]})

fig,ax=plt.subplots()
plt.plot(df.A,df.C)
plt.plot(df.A,df.B)
plt.legend(bBox_to_anchor=(1.5,1),loc='upper right',ncol=1)

buf = io.BytesIO()
plt.savefig(buf,format='png')
buf.seek(0)

我可以使用bufImage.open(buf)制作图像。可以正常工作,但是我仍然必须存储它。

现在,buf的类型为_io.BytesIO。将图存储在数据库中时,将存储test=buf.read()类型的bytes。这很顺利,因为我可以测试从数据库中拉出的东西实际上等于测试。

调用Image.open(bytes_image)时,确保bytes_image的类型实际上是_io.BytesIO时,出现错误

image = Image.open(bytes_image)
Traceback (most recent call last):

File "<ipython-input-472-486e94302154>",line 1,in <module>
image = Image.open(bytes_image)

File "/opt/anaconda3/lib/python3.7/site-packages/PIL/Image.py",line 2862,in open
"cannot identify image file %r" % (filename if filename else fp)

UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7f54a9f69050>

有人在重建图像时注意到我可能会丢失的东西吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)