无法将PIL缩略图转换为PYQt4图标

0 投票
2 回答
588 浏览
提问于 2025-04-17 08:12

我在用PIL把一些Qimage转换成缩略图的时候遇到了问题。这个缩略图是要放在一个列表控件里,看看下面的图片

这里输入图片描述

本来图片应该是这样的:

这里输入图片描述

请注意,我使用的是水平排列,而且列表项的文本是空的。还有一点:只有当我放入超过一张图片时,这个问题才会出现

for i in listOfImages:
    picture = Image.open(i)

    picture.thumbnail((50,50), Image.ANTIALIAS )
    qimage = QtGui.QImage(ImageQt.ImageQt(picture))
    icon = QtGui.QIcon(QtGui.QPixmap.fromImage(qimage))





    item = QtGui.QListWidgetItem(str(path))

    item.setIcon(icon)

    self.listWidget.addItem(item)

有没有人知道这是怎么回事?为什么图片会变得像素化?有没有更好的解决办法?

补充说明:使用

pix = QtGui.QPixmap(path)
pix = pix.scaled(50,50,QtCore.Qt.KeepAspectRatio)
icon = QtGui.QIcon(pix)

会非常麻烦(运行需要10秒),而上面的代码只需要1秒。

谢谢!

2 个回答

0

我没有用过PIL和PyQt一起。你试过用QImageReader吗?

    item = QListWidgetItem(image_path)

    imageReader = QImageReader()
    imageReader.setFileName(image_path)
    size = imageReader.size()
    size.scale(50, 50, Qt.KeepAspectRatio)
    imageReader.setScaledSize(size)
    image = imageReader.read()

    pix = QPixmap.fromImage(image)
    icon = QIcon(pix)
    item.setIcon(icon)
    self.listWidget.addItem(item)
1
from io import BytesIO
qimage = QtGui.QImage()
fp = BytesIO()
picture.save(fp, "BMP")
qimage.loadFromData(fp.getvalue(), "BMP")

图标 ...

我试过使用ImageQt,但效果不太好。
我参考了这个链接:http://doloopwhile.hatenablog.com/entry/20100305/1267782841
因为我用的是python 3.3,所以cStringIO被BytesIO替代了。

撰写回答