我在寫一個照片組織應用程序,它使用QListWidget來顯示照片文件的文件名和縮略圖。我使用QListWidget的QItem的QIcon屬性來顯示圖像的縮略圖。用戶可以編輯EXIF數據和照片的文件名,然後將數據保存到圖像文件中。 Jpgs中可能沒有嵌入縮略圖,所以我的應用程序允許用戶將新生成的縮略圖嵌入到jpg文件中。Python:將QT QIcon轉換爲jpeg?
我想檢索QIcon圖像並將其保存在原始照片文件元數據的EXIF部分。爲此,我需要將QIcon圖像轉換爲jpeg字節。我讀過QIcon文檔,但找不到從QIcon對象獲取jpeg byles的方法。
我正在使用Python 3和piexif將EXIF數據寫入文件。我在填充QListWidget時使用PILLOW創建jpeg縮略圖。我可以使用PILLOW在保存時創建縮略圖,但由於縮略圖已經存在於QIcon中,因此使用QIcon圖像會更有效率。
到目前爲止,這是我的代碼的本質。顯然,它不起作用,因爲QIcon是一個QIcon對象,而不是jpeg字節。 fileName
是一個包含圖像文件的完整有效路徑的變量。 lstPhotos
是一個QListWidget。
我非常感謝任何建議!
for i in lstPhotos:
exif_dict["thumbnail"] = i.icon()
exif_bytes = piexif.dump(exif_dict)
piexif.insert(exif_bytes, fileName)
感謝@Ekhumoro的幫助!下面的代碼工作:
def ConvertIconToJpeg(self, icon, size=None, fmt='JPG'):
if size is None:
size = icon.availableSizes()[0]
pixmap = icon.pixmap(size)
array = QtCore.QByteArray()
buffer = QtCore.QBuffer(array)
buffer.open(QtCore.QIODevice.WriteOnly)
pixmap.save(buffer, fmt)
buffer.close()
return array.data()'
,然後遵循常規後在同一類:
for i in lstPhotos.items():
thisThumbnail = exif_dict.pop("thumbnail")
if thisThumbnail is None:
thisThumbnail = self.ConvertIconToJpeg(i.icon())
exif_dict["thumbnail"] = thisThumbnail
exif_bytes = piexif.dump(exif_dict)
piexif.insert(exif_bytes, fileName)`
這看起來不錯。我會試一試。 return語句應該返回緩衝區而不是數組?作爲一個python noob,在我看來,'buffer'語句完成的工作不會反映在返回的數據中。還是我困惑?如果是這樣,那麼'buffer'語句如何影響數組? – trinkner
緩衝區將圖像數據寫入數組。該函數將數組內的數據作爲python「bytes」對象返回。 – ekhumoro
仍然無法嵌入拇指。 '變形點焊ConvertIconToJpeg(個體,圖標,大小=無,FMT =' JPG'): 如果尺寸是無: 尺寸= icon.availableSizes()[0] 的pixmap = icon.pixmap(大小) 陣列= QtCore .QByteArray() 緩衝液= QtCore.QBuffer(數組) buffer.open(QtCore.QIODevice.WriteOnly) pixmap.save(緩衝液,FMT) buffer.close() 返回的數組。數據() ' 和 ' thisThumb = self.ConvertIconToJpeg(i.icon(),0, 「JPG」) exif_dict [ 「縮略圖」] = thisThumb exif_bytes = piexif.dump(exif_dict) piexif.insert( exif_bytes,fileName) – trinkner