【问题标题】:How to convert a QPixmap's image into a bytes如何将 QPixmap 的图像转换为字节
【发布时间】:2019-08-08 03:26:09
【问题描述】:

我想从 QLabel 中获取图像的数据,然后将其存储到 PostgreSQL 数据库中,但我无法将其存储为 QPixmap,首先我需要将其转换为字节。这就是我想知道的。

我已经阅读了 pyqt5 的部分文档,特别是 QImage 和 QPixmap 的部分,但还没有看到我要查找的内容。

from PyQt5 import QtWidgets, QtGui
class Widget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__(None)
        self.label = QtWidgets.QLabel(self)
        self.label.setPixmap(QtGui.QPixmap("ii_e_desu_ne.jpg"))
        self.setFixedSize(400,400)
        self.label.setFixedSize(200, 200)
        self.label.move(50, 50)
        self.show()

    #All is set now i want to convert the QPixmap instance's image 
    #into a byte string

app = QtWidgets.QApplication([])
ventana = Widget()
app.exec_()

【问题讨论】:

  • This answer 用于将QPixmap 转换为numpy.ndarray 应该可以工作。只需省略将数据从字节字符串转换为 numpy 数组的最后一步。

标签: python pyqt pyqt5 qimage qpixmap


【解决方案1】:

如果要将QPixmap 转换为字节,则必须使用QByteArrayQBuffer

# get QPixmap from QLabel
pixmap = self.label.pixmap()

# convert QPixmap to bytes
ba = QtCore.QByteArray()
buff = QtCore.QBuffer(ba)
buff.open(QtCore.QIODevice.WriteOnly) 
ok = pixmap.save(buff, "PNG")
assert ok
pixmap_bytes = ba.data()
print(type(pixmap_bytes))

# convert bytes to QPixmap
ba = QtCore.QByteArray(pixmap_bytes)
pixmap = QtGui.QPixmap()
ok = pixmap.loadFromData(ba, "PNG")
assert ok
print(type(pixmap))

self.label.setPixmap(pixmap)

QImage也是如此,“PNG”是要转换的格式,因为QImage/QPixmap对文件格式进行了抽象,可以使用here指示的格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    相关资源
    最近更新 更多