Изображение и csv

В общем нужно сохранить картинку в ячейку в файл формата csv.

Догадываюсь, что дело в кодировках, но не могу понять синтаксис.

Помещаю картинку в label:

label_3.setPixmap(QPixmap(self.pixmap))

Потом я ее помещаю в буфер:

buffer = QtCore.QBuffer()

pixmap.save(buffer, 'jpg')

stamp_data = buffer.data().Base64Encoding 

Eсли с методом Base64Encoding, то записывается 0 в ячейку, если без него, - то куча символов (я так понимаю картинка в кодировке).

Запись делаю в файл вот так:

with open("file_name.csv", "a", newline='') as f:
    writer = csv.writer(f, delimiter=";")
        for row in spisok_znachenii:
            writer.writerow(row)
            print(row)

Когда открываю записанный файл, то либо 0, либо куча символов, но нужна картинка.

В целом и общем объясните, как вообще можно положить картинку в ячейку csv или xls.


Ответы (1 шт):

Автор решения: Alexander Chernin

Помещение картинки в буфер:

pixmap = QPixmap('<исходное изображение>')
buffer = QBuffer()
pixmap.save(buffer, 'jpg')

# toBase64()
stamp_data = buffer.data().toBase64()

Запись в csv-файл

file = QFile("<filename>.csv")
if file.open(QFile.WriteOnly)):
    csv = QTextStream(&file)
    csv << stamp_data
file.close()

Чтение из csv:

file = QFile("<filename>.csv")
if file.open(QFile.ReadOnly)):
    stream = QTextStream(file)
    image_data_from_csv = stream.readLine()

    pixData = QByteArray.fromBase64(image_data_from_csv)
    pixmap = QPixmap()
    pixmap.loadFromData(pixData)

    # pixmap.save('<результирующая картинка>') 
    # должна быть такой же как исходная картинка 
file.close()
→ Ссылка