我有这个PySide2代码,可在Linux上使用Python 2.7
from PySide2.QtCore import QBuffer, QByteArray
...
image = self.clipboard.image()
ba = QByteArray()
buffer = QBuffer(ba)
buffer.open(QIODevice.WriteOnly)
image.save(buffer, "PNG")
return bytes(buffer.data())
但是在具有Python 3.6的Windows上,它在这里失败:
File "C:\....foo.py", line 93, in image_to_png
return bytes(buffer.data())
例外:
TypeError: 'bytes' object cannot be interpreted as an integer
获取PNG字节的最简单方法是什么?
我想避免创建一个临时文件,因为在这种情况下不需要它。
(我使用PySide2,但如果您认为更有意义,则可以切换到其他python-QT绑定。如果您认为这样,请发表评论)
答案 0 :(得分:2)
看起来QBuffer.data()
的返回类型为QByteArray
(bytes()
构造函数可能无法处理),但是QByteArray.data()
的返回类型为bytes
。因此,我认为您应该尝试使用return buffer.data().data()
而不是return bytes(buffer.data())
。
答案 1 :(得分:0)
这是一种解决方法。
def image_to_png(image):
temp_png = tempfile.mktemp('.png')
image.save(temp_png)
with io.open(temp_png, 'rb') as fd:
content = fd.read()
os.unlink(temp_png)
return content
如果可能,我想避免使用临时文件。欢迎其他解决方案。