如何在 Python 3 中将 QImage(QPixmap) 转换为 PIL Image?

Nik*_*iuk 2 python pyqt pyqt4 python-imaging-library pyqt5

我想将图像从 QImage 或 Qpixmap 类转换为 PIL Image。我发现了这个:Convert PyQt to PIL image

但它似乎在 Python3 中不起作用。是否存在将其实现到 Pyhton3 或更简单地使用新方法的方法?

eyl*_*esc 5

根据文档:

StringIO 和 cStringIO 模块消失了。相反,导入 io 模块并分别将 io.StringIO 或 io.BytesIO 用于文本和数据。

因此,解决办法是做转换cStringIO.StringIO到io.BytesIO。

PyQt5:

import io
from PIL import Image
from PyQt5.QtGui import QImage
from PyQt5.QtCore import QBuffer

img = QImage("image.png")
buffer = QBuffer()
buffer.open(QBuffer.ReadWrite)
img.save(buffer, "PNG")
pil_im = Image.open(io.BytesIO(buffer.data()))
pil_im.show()
Run Code Online (Sandbox Code Playgroud)

PyQt4:

import io
from PIL import Image
from PyQt4.QtGui import QImage
from PyQt4.QtCore import QBuffer

img = QImage("image.png")
buffer = QBuffer()
buffer.open(QBuffer.ReadWrite)
img.save(buffer, "PNG")
pil_im = Image.open(io.BytesIO(buffer.data()))
pil_im.show()
Run Code Online (Sandbox Code Playgroud)