在 python 2.7 中从 LevelDB 加载图像
Loading Images from a LevelDB in python 2.7
我遇到了 python (2.7) "strings" 的问题。
我正在使用 LevelDB 并想从数据库加载图像并将其保存到磁盘(例如,作为 test.jpeg)。
要访问数据库,我正在使用 plyvel
包。我得到的img数据如下:
img = db.get(str(id))
问题在于 LevelDB 将每个值存储为字节字符串。因此,db.get()
returns 一个字节串。如果我尝试将 img 写入磁盘
f = io.open('test.jpeg', 'wb')
f.write(img)
f.close()
然后打开它,然后我得到类似的东西:
Not a JPEG file: starts with 0xc3 0xbf
c3 bf
是latin-1中ff
的UTF-8编码,是JFIF的图像标记开始的第一个字节。
如何 encode/decode 字符串才能打开 jpeg 文件?
我试过 bytearray(img) 没有用。编码/解码 img 字符串根本没有帮助。
=== 编辑 ===
我现在使用的是这个序列:
img = db.get(str(id))
img_decode_utf8 = img.decode('utf-8')
img_bytes = array.array('u', img_decode_utf8)
如果我打印 img_bytes
我得到:
array('u', u'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\...
但是,如果我将它写入磁盘,每个字节都是"zero extended"。十六进制转储:
00ff 0000 00d8 0000 00ff 0000 00e0 0000
提前致谢
这解决了我的问题:
img = db.get(str(hash_value))
img_bytes = img.decode('utf-8').encode('latin-1')
with open('test.jpeg', 'wb') as new_file:
new_file.write(img_bytes)
我很确定我试过了,但它一开始就没用..
我遇到了 python (2.7) "strings" 的问题。 我正在使用 LevelDB 并想从数据库加载图像并将其保存到磁盘(例如,作为 test.jpeg)。
要访问数据库,我正在使用 plyvel
包。我得到的img数据如下:
img = db.get(str(id))
问题在于 LevelDB 将每个值存储为字节字符串。因此,db.get()
returns 一个字节串。如果我尝试将 img 写入磁盘
f = io.open('test.jpeg', 'wb')
f.write(img)
f.close()
然后打开它,然后我得到类似的东西:
Not a JPEG file: starts with 0xc3 0xbf
c3 bf
是latin-1中ff
的UTF-8编码,是JFIF的图像标记开始的第一个字节。
如何 encode/decode 字符串才能打开 jpeg 文件? 我试过 bytearray(img) 没有用。编码/解码 img 字符串根本没有帮助。
=== 编辑 ===
我现在使用的是这个序列:
img = db.get(str(id))
img_decode_utf8 = img.decode('utf-8')
img_bytes = array.array('u', img_decode_utf8)
如果我打印 img_bytes
我得到:
array('u', u'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\...
但是,如果我将它写入磁盘,每个字节都是"zero extended"。十六进制转储:
00ff 0000 00d8 0000 00ff 0000 00e0 0000
提前致谢
这解决了我的问题:
img = db.get(str(hash_value))
img_bytes = img.decode('utf-8').encode('latin-1')
with open('test.jpeg', 'wb') as new_file:
new_file.write(img_bytes)
我很确定我试过了,但它一开始就没用..