pys*_*erg 8 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()
Run Code Online (Sandbox Code Playgroud)
我在Windows 7 64bit上,使用python 3.4与PyQt4和枕头3.1.0.我得到的结果可以在下面看到.
原始图片

GUI中显示的图片

提前致谢 :).
tit*_*jan 15
在你的PIL图像中,最后一个波段是alpha通道,而在Qt图像中,alpha通道是第一个(RGBA与ARGB).可能存在排列乐队的方法,但最简单的方法似乎是使用ImageQt类.
from PIL.ImageQt import ImageQt
qim = ImageQt(im)
pix = QtGui.QPixmap.fromImage(qim)
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但 ImageQt 在我的系统 Win10、Python3、Qt5 中崩溃了。所以我去了另一个方向并尝试了在 github 上找到的解决方案。此代码不会崩溃,但会产生第一篇文章中显示的效果。
我对此的解决方案是,将 RGB 图片分离为每种颜色并将其组装为 BGR 或 BGRA,然后再将其转换为 Pixmap
def pil2pixmap(self, im):
if im.mode == "RGB":
r, g, b = im.split()
im = Image.merge("RGB", (b, g, r))
elif im.mode == "RGBA":
r, g, b, a = im.split()
im = Image.merge("RGBA", (b, g, r, a))
elif im.mode == "L":
im = im.convert("RGBA")
# Bild in RGBA konvertieren, falls nicht bereits passiert
im2 = im.convert("RGBA")
data = im2.tobytes("raw", "RGBA")
qim = QtGui.QImage(data, im.size[0], im.size[1], QtGui.QImage.Format_ARGB32)
pixmap = QtGui.QPixmap.fromImage(qim)
return pixmap
Run Code Online (Sandbox Code Playgroud)
我测试过RGB,PIL以qt格式保存数据Format_RGB888:
im = im.convert("RGB")
data = im.tobytes("raw","RGB")
qim = QtGui.QImage(data, im.size[0], im.size[1], QtGui.QImage.Format_RGB888)
Run Code Online (Sandbox Code Playgroud)
我还没有测试过它,但我假设对于 RGBA 它将是等效的格式Format_RGBA8888:
im = im.convert("RGBA")
data = im.tobytes("raw","RGBA")
qim = QtGui.QImage(data, im.size[0], im.size[1], QtGui.QImage.Format_RGBA8888)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7157 次 |
| 最近记录: |