将PyQt4.QtGui.QImage对象转换为Base64 PNG数据

0 投票
2 回答
1711 浏览
提问于 2025-04-18 14:49

我该如何从一个 PyQt4.QtGui.QImage 对象 中获取原始的 base64 PNG 数据呢?我找到的唯一一个看起来有用的方法是 bits(),但是它只返回了一个 sip.voidptr 对象,我对接下来该怎么做完全没有头绪。

2 个回答

-2

如果你想直接访问内存中的数据,你的方法是对的。这是一个C语言的数组,没有和Python对象关联,所以有点复杂。你需要:从bits()获取起始地址,depth()和byteCount()。使用ctypes.string_at可以让你访问那里的数据,然后你可以把这些数据传给一个numpy数组,使用已知的每像素位数和图像形状。

我就不多写了,因为这种操作可能会导致崩溃(而且我现在没有测试数据)——你不能用常规的方法加载图像吗?

2

QImage 代表的是一张图片,而不是一个图片文件。也就是说,QImage 对象本身并不包含 PNG、JPG 或其他格式的信息。要把 QImage 保存为 PNG 格式,你需要使用 QImage::save 这个方法。保存的方式可以是直接存到硬盘上的文件,也可以存到任何 QIODevice 设备里。在这里,QBuffer 是一个很方便的输入输出设备,它可以把数据存储在 QByteArray 中。之后,我们可以用 QByteArray::toBase64 方法来获取最终的结果。

image = QImage(filename)
data = QByteArray()
buf = QBuffer(data)
image.save(buf, 'PNG')
print data.toBase64()

撰写回答