Как преобразовать байты массива в изображение? - PullRequest
0 голосов
/ 30 июня 2018

У меня есть CSV-файл, который был извлечен из базы данных MS SQL с включенным столбцом изображения. Моя задача - преобразовать содержимое каждой строки в столбце изображения в изображение и сохранить его как файл изображения.

Вот содержимое строки -

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

Поскольку длина содержимого превышает ограниченное количество слов, я загрузил его на Google Drive.

Я изменил его на bytearray и попытался записать его в новый файл и прочитать как изображение, но у меня нет изображения.

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 голосов
/ 30 июня 2018

Строка в шестнадцатеричном формате. Вы можете удалить начальную строку 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...