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

Posted

技术标签:

【中文标题】如何在 Python 3 中将 QImage(QPixmap) 转换为 PIL Image?【英文标题】:How to convert QImage(QPixmap) to PIL Image in Python 3? 【发布时间】:2017-11-14 15:47:55 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

根据docs:

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()

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()

【讨论】:

@eyllanesc 你会如何在 PyQt4 中做到这一点? @LironLavi 我已经用 python3 展示了 PyQt4 的代码,对于 python2 你应该使用问题中显示的链接 在不再需要 buffer.close() 之后,我也会添加它。

以上是关于如何在 Python 3 中将 QImage(QPixmap) 转换为 PIL Image?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PyQt4 中将 QImage 插入到 NxN 网格布局中?

366通过 python 求解 QP 问题

如何在 Qt 中将 tiff 或 pnm 转换为 jpeg

你如何从 sip.voidptr (QImage.constBits()) 到 ctypes void 或 char 指针?

如何将 RGB32 格式的 QImage 转换为 OpenCV::mat?

如何在 PySide 和 Python 3.X 中将字节写入 QDataStream?