невозможно преобразовать пиктограммы PIL в пиктограммы PYQt4 - PullRequest
0 голосов
/ 12 декабря 2011

У меня проблема при преобразовании некоторых изображений в миниатюры с использованием PIL.для использования в виджете списка, проверьте изображение ниже

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 ]

1 голос
/ 20 марта 2014
from io import BytesIO
qimage = QtGui.QImage()
fp = BytesIO()
picture.save(fp, "BMP")
qimage.loadFromData(fp.getvalue(), "BMP")

icon ...

Я пробовал ImageQt, но производительность не очень хорошая. Я ссылаюсь http://doloopwhile.hatenablog.com/entry/20100305/1267782841
Поскольку я использую python 3.3, cStringIO заменяется на BytesIO

0 голосов
/ 13 декабря 2011

Я не использовал 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)
...