在python 2.7中从LevelDB加载图像

时间:2018-03-27 15:55:08

标签: string python-2.7 encoding jpeg leveldb

我遇到了python(2.7)" strings"的问题。 我正在使用LevelDB并希望从数据库加载图像并将其保存到磁盘(例如,作为test.jpeg)。

要访问数据库我正在使用plyvel包。我得到的img数据如下:

img = db.get(str(id))

问题是LevelDB将每个值存储为字节字符串。因此,db.get()返回一个字节字符串。如果我尝试将img写入磁盘

f = io.open('test.jpeg', 'wb')
f.write(img)
f.close()

然后打开它我后来得到类似的东西:

  

不是JPEG文件:以0xc3 0xbf

开头

c3 bf是latin-1中ff的UTF-8编码,它是JFIF图像标记开头的第一个字节。

如何对字符串进行编码/解码,以便我可以打开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\...

但是,如果我将其写入磁盘,则每个字节都为"零扩展"。 hexdump都:

00ff    0000    00d8    0000    00ff    0000    00e0    0000

提前致谢

1 个答案:

答案 0 :(得分:0)

这解决了我的问题:

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)

我很确定我尝试了这个并且它首先不起作用..