【问题标题】:Loading Images from a LevelDB in python 2.7在 python 2.7 中从 LevelDB 加载图像
【发布时间】:2018-09-06 03:09:12
【问题描述】:

我遇到了 python (2.7)“字符串”的问题。 我正在使用 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 bfff在latin-1中的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\...

但是,如果我将其写入磁盘,则每个字节都是“零扩展”。十六进制转储:

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

提前致谢

【问题讨论】:

    标签: string python-2.7 encoding jpeg leveldb


    【解决方案1】:

    这解决了我的问题:

    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)
    

    我很确定我尝试过这个,但它一开始没有用..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多