无法将PIL缩略图转换为PYQt4图标
我在用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替代了。