如何解决将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)
我可以使用buf
从Image.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 举报,一经查实,本站将立刻删除。