将PyQt4.QtGui.QImage对象转换为Base64 PNG数据
我该如何从一个 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()