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

时间:2011-12-12 09:47:04

标签: python pyqt pyqt4 python-imaging-library

使用PIL将一些Qimages转换为缩略图时出现问题。  要在列表小部件中使用,请检查下面的图像

enter image description here

图片应如下所示:

enter image description here

请注意我使用水平流程,项目文本是空文本 还有一件事:这只发生在我放置超过1张图片

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 :(得分: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替换

答案 1 :(得分: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)