python - PIL 图像到 QPixmap 的转换问题

标签 python pyqt pyqt4 python-imaging-library pillow

今天我一直在努力应对这个挑战,我已经成功地利用以前的帖子和其他资源得到了一个很好的观点。

我正在尝试将 PIL.Image 转换为 QPixmap,以便我可以在我的 PyQT GUI 上使用 QgraphicsScene 进行显示。但是当图片显示时颜色已经改变了??有没有人遇到过这个问题?

我为此使用的代码如下。

self.graphicsScene.clear()
im = Image.open('Penguins.jpg')
im = im.convert("RGBA")
data = im.tobytes("raw","RGBA")
qim = QtGui.QImage(data, im.size[0], im.size[1], QtGui.QImage.Format_ARGB32)
pix = QtGui.QPixmap.fromImage(qim)
self.graphicsScene.addPixmap(pix)
self.graphicsView.fitInView(QtCore.QRectF(0,0,im.size[0], im.size[1]), QtCore.Qt.KeepAspectRatio)
self.graphicsScene.update()

我在 windows 7 64 位上,使用 python 3.4 与 PyQt4 和 pillow 3.1.0。我得到的结果如下所示。

原图

GUI中显示的图片

提前致谢:)。

最佳答案

在您的 PIL 图像中,最后一个波段是 alpha channel ,而在 Qt 图像中,alpha channel 是第一个(RGBA 与 ARGB)。可能还有其他排列波段的方法,但最简单的方法似乎是使用 ImageQt 类。

from PIL.ImageQt import ImageQt
qim = ImageQt(im)
pix = QtGui.QPixmap.fromImage(qim)

关于python - PIL 图像到 QPixmap 的转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34697559/

相关文章:

python:为Popen命令传递多个参数

python - pyqt5,接收属性错误: 'QMainWindow' object has no attribute 'browseSlot'

python - 当我按下另一个 QWidget 中的按钮时,我想在 QPixmap 中设置 path_to_photo

python - 如何将参数传递给 QThread Worker 类?

python - 单击最小化按钮时触发pyqt事件

python - 在列表上调用方法时不同语法之间的差异

python - 当链接没有类时,使用 Xpath 在 Python 中获取链接的 anchor 文本

python - 可用于日志格式的调用堆栈

python - 如何删除 gridLayout (QT) 内的间距?

python - 是否可以让 PySide 的 QUIloader 像 PyQt 的 uic.loadUi 一样工作?