首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:将QT QIcon转换为jpeg?

Python:将QT QIcon转换为jpeg?
EN

Stack Overflow用户
提问于 2016-11-24 15:18:41
回答 2查看 693关注 0票数 3

我正在编写一个照片组织应用程序,它使用QListWidget来显示照片文件的文件名和缩略图。我使用QListWidget的QIcon属性来显示图像的缩略图。用户可以编辑EXIF数据和照片的文件名,然后将数据保存到图像文件中。jpg可能还没有安装缩略图,所以我的应用程序允许用户将新生成的缩略图嵌入到jpg文件中。

我想检索QIcon映像并将其保存在原始照片文件元数据的EXIF部分。为此,我需要将QIcon映像转换为jpeg字节。我已经阅读了QIcon文档,但是找不到从QIcon对象获取jpeg byles的方法。

我使用Python 3和piexif将EXIF数据写入文件。在填充QListWidget时,我使用枕头创建jpeg缩略图。我可以在保存时使用枕头创建缩略图,但是由于QIcon中已经存在缩略图,所以使用QIcon图像会更有效。

到目前为止,这是我代码的精髓所在。显然,它不起作用,因为QIcon是一个QIcon对象,而不是jpeg字节。fileName是一个变量,它包含图像文件的完整有效路径。lstPhotos是QListWidget。

如有任何建议,我将不胜感激!

代码语言:javascript
复制
for i in lstPhotos:
    exif_dict["thumbnail"] = i.icon()
    exif_bytes = piexif.dump(exif_dict)
    piexif.insert(exif_bytes, fileName)

感谢@Ekhumoro寻求帮助!以下代码起作用:

代码语言:javascript
复制
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()'

随后,在同一个类中的一个例程中进行如下操作:

代码语言:javascript
复制
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)`
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-24 18:47:05

您需要从图标(可以有多个)获取像素映射,然后将其保存到具有所需格式的缓冲区中:

代码语言:javascript
复制
def convert_icon(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()

这个函数应该像这样使用:

代码语言:javascript
复制
thumbnail = convert_icon(icon)
exif = piexif.load(path)
exif['thumbnail'] = thumbnail
data = piexif.dump(exif)
piexif.insert(data, path)
票数 2
EN

Stack Overflow用户

发布于 2016-11-24 18:31:36

您可以从QPixmap中获取QIcon,然后可以将QPixmap保存为JPEG格式。也许有一个更好的方法,但这是我现在能想到的。希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40789856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档