我正在编写一个照片整理应用程序,它使用QListWidget显示照片文件的文件名和缩略图。我使用QListWidget的QItem的QIcon属性来显示图像的缩略图。用户可以编辑EXIF数据和照片的文件名,然后将数据保存到图像文件中。JPG文件可能没有内嵌的缩略图,因此我的应用程序允许用户将新生成的缩略图嵌入到JPG文件中。
我想获取QIcon图像并将其保存在原始照片文件的元数据的EXIF部分中。为此,我需要将QIcon图像转换为jpeg字节。我已经阅读了QIcon文档,但找不到从QIcon对象获取jpeg字节的方法。
我正在使用Python 3和piexif编写EXIF数据到文件中。我正在使用PILLOW创建jpeg缩略图来填充QListWidget。我可以在保存时使用PILLOW创建缩略图,但由于缩略图已经存在于QIcon中,因此使用QIcon图像将更高效。
以下是我的代码要点。显然,它无法运行,因为QIcon是QIcon对象,而不是jpeg字节。fileName是包含完整有效路径的变量,lstPhotos是QListWidget。
感谢任何建议!
我想获取QIcon图像并将其保存在原始照片文件的元数据的EXIF部分中。为此,我需要将QIcon图像转换为jpeg字节。我已经阅读了QIcon文档,但找不到从QIcon对象获取jpeg字节的方法。
我正在使用Python 3和piexif编写EXIF数据到文件中。我正在使用PILLOW创建jpeg缩略图来填充QListWidget。我可以在保存时使用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新手,对我来说,buffer
语句所做的工作似乎不会反映在返回的数据中。或者我被搞混了吗?如果是这样,buffer
语句如何影响数组? - trinknerbytes
对象返回。 - ekhumoroexif_dict["thumbnail"] = thisThumb exif_bytes = piexif.dump(exif_dict) piexif.insert(exif_bytes, fileName)' - trinkner