Я хочу просмотреть исходное изображение - PullRequest
0 голосов
/ 26 июня 2018

enter image description here

Я хочу просмотреть исходный файл изображения.

Но все изображения преобразуются в пятнистое, поврежденное изображение.

Кажется, что предыдущее изображение не равно заднему изображению.

Пожалуйста, измените размер изображения в конструкторе QImage на размер вашего произвольного образца изображения.

Если я извиняюсь за этот код, я поймал испорченное изображение. Почему?

enter image description here

Я пытался изменить Format.Format_ARGB32_Premultiplied на различные шаблоны.

Но все паттерны шли не очень хорошо.

from PIL import Image
import numpy as np
from PySide import QtCore
from PySide import QtGui
import sys
#the original file
filename = 'Any_Data.png'

im = Image.open(filename)
data = np.array(im)

file_ = QtCore.QFile("test_file.img")
file_.open(QtCore.QIODevice.WriteOnly)
qdatastream = QtCore.QDataStream(file_)


bytedatas = QtCore.QByteArray(data.tobytes())
#print(bytedatas)
#print(len(data.tobytes()),type(data))

qdatastream << bytedatas

output_file_ = QtCore.QFile("test_file.img")
output_file_.open(QtCore.QIODevice.ReadOnly)
qdatastream = QtCore.QDataStream(output_file_)
#the behind file
bytedata = QtCore.QByteArray()

qdatastream >> bytedata


Image = QtGui.QImage(220,133,QtGui.QImage.Format.Format_ARGB32_Premultiplied)
Image.fromData(bytedata)
def main():
    try:
        QtGui.QApplication([])
    except Exception as e:
        print(e)

    widget = QtGui.QLabel()

    pixmap = QtGui.QPixmap()
    pixmap.convertFromImage(Image)
    widget.setPixmap(pixmap)

    widget.show()
    sys.exit(QtGui.QApplication.exec_())
if __name__ == "__main__":
    main()

1 Ответ

0 голосов
/ 26 июня 2018

Когда вы конвертируете и сохраняете данные в байтах, вы теряете информацию измерения.Если ваша цель - сохранить информацию об изображении, лучше всего преобразовать PIL в QImage и сохранить этот QImage в файле, тогда вы можете просто восстановить его, как показано ниже:

import sys

from PIL import Image
import numpy as np

from PySide import QtCore, QtGui

filename = 'Any_Data.png'
filename_out = "data.bin"

im = Image.open(filename)
data = np.array(im)
qimagein = QtGui.QImage(data.data, data.shape[1], data.shape[0], data.strides[0], QtGui.QImage.Format_RGB888)

# save data
filewrite = QtCore.QFile(filename_out)
filewrite.open(QtCore.QIODevice.WriteOnly)
out_datastream = QtCore.QDataStream(filewrite)
out_datastream << qimagein

# read data
fileread = QtCore.QFile(filename_out)
fileread.open(QtCore.QIODevice.ReadOnly)
qimageout = QtGui.QImage()
in_datastream = QtCore.QDataStream(fileread)
in_datastream >> qimageout

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    w = QtGui.QLabel()
    pix = QtGui.QPixmap.fromImage(qimageout)
    w.setPixmap(pix)
    w.show()
    sys.exit(app.exec_())
...