从PIL到PySide QImage的更好方法?

Rod*_*Day 3 pyqt pyqt4 pyside python-imaging-library

我的应用程序加载图像并在其上打印一些文本.然后我想将打印的图像用作按钮图标上的标签.

问题是我无法将"Image"传递给QIcon或任何PyQt类.我发现了一种在线方法,建议将文件作为原始字符串发送到Qt的解析器中,并从中重建图像.

除了图像是蓝色外,它的效果非常好.在读完图像处理后,我学会了修复它,我需要移位和反转所有位,所以

        data = im.convert('RGBA').tostring()
    data = ''.join([''.join(i) for i in zip(data[2::4],data[1::4],data[0::4],data[3::4])])
    qim = QtGui.QImage(data, im.size[0], im.size[1],
                    QtGui.QImage.Format_ARGB32)
    pix = QtGui.QPixmap.fromImage(qim)
Run Code Online (Sandbox Code Playgroud)

我的小连接/拉链魔术似乎有些不合适,我不明白为什么有必要.有一个更好的方法吗?我知道在吐出RGBA并将其解析为ARGB时存在一个明显的问题,但我探索PIL和PyQt文档无济于事.

mat*_*ata 6

PIL(1.6及更高版本)有一个模块ImageQt,这使得很容易将Imagea 转换为a QImage,至少为PyQt4.如果您还需要它与PySide一起使用,它应该是对的简单更改

  • 此外,无需更改源以将ImageQt与PySide一起使用.你可以在`import ImageQt` http://pastebin.com/DX2pbdpV之前写`sys.modules ['PyQt4'] = PySide` (5认同)