I want to view the original Image file.
But all Images are converted into the spotted,corrupted image.
It seems that the previous image is not equal to the behind image.
Please change the image size in the QImage's constructor into your arbitrary sample image's size.
If I excute this code, I caught the corrupted Image. Why?
I tried to change Format.Format_ARGB32_Premultiplied into various patterns.
But all patterns didn't go well.
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()
When you convert and save data by bytes you are losing the information of the dimension. If your goal is to save the image information it is best to convert the PIL to QImage, and save this QImage in the file, then you can simply recover it as shown below:
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_())