如何将数组的字节转换为图像?

时间:2018-06-30 16:40:39

标签: python arrays sql-server image

我有一个csv文件,该文件是从包含图像列的MS SQL数据库中提取的。我的任务是将图像列中每一行的内容转换为图像并将其另存为图像文件。

这是一行的内容-

https://drive.google.com/open?id=1J_jz5vN8ATxJ5Qw_c8l0qqKFrIee8kHF

由于内容长度超出了限制的字数,我将其上传到了Google云端硬盘。

我将其更改为字节数组,并尝试将其写入新文件并以图像形式读取,但是我没有图像。

https://drive.google.com/open?id=1h-7cRiTWErZzmMJYmc6XmLmeLK982WZR

如何将字节数组转换为图像?我尝试将其写入新文件并使用io进行读取。我花了8个小时以上,并尝试了在stackoverflow上找到的所有解决方案。请帮助我找到解决方案。

这是我的代码-

    df = (pd.Series(df['image']))
df = df.dropna()

x = df[3]
print (x)
bytes = base64.b64decode(x)
print (bytes)
image = open("new.jpeg","wb")
image.write(bytearray(bytes))
image.close()

1 个答案:

答案 0 :(得分:1)

该行为十六进制格式。您可以删除开头的0x,然后使用来转换为字节

import codecs
data = codecs.decode(x[2:], 'hex')

或等效地,

data = bytes.fromhex(x[2:])

(十六进制是一种常见格式,bytes为其具有备用构造函数。)

然后imghdr报告它是一个jpeg。

import imghdr
print(imghdr.what(None, h=data))

如果将这些字节保存在.jpeg文件中,则应该可以打开它。

with open('foo.jpg', 'wb') as foo:
    foo.write(data)

enter image description here