【问题标题】:Converting bytes to an image with base64 via PyQt5通过 PyQt5 将字节转换为 base64 的图像
【发布时间】:2018-05-18 22:26:07
【问题描述】:

我已经用 base64 转换了这样的 png 文件

b'iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAangAAGp4B8NQjJQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANRSURB\nVGiB7dpPqFVVFMfxz3tKVGS97EEGGYSZORGKJxHUw/4QgeNoVDTMAiuhoSAIgaD9/wMNhBo0qCZN\nghpIf0ZiDeRFFBJBEpFWgqG+euptsN957Hc853ruOeteL+IPFhzOvay1v/vss/beax+uaLw0Eezv\nGmzGpkWbKv1+AnM4jG9xJjh+J92CF/A15tFraPP4Cs9jzchbnelOfICzmje+zs7ifdwxSoDr8RoW\nAgDKtoB9WDVsiEfw2xAAynYUDw4LYhfOjQCisHPYGQkwgTdGCFC2VwVl13cvIURh73SFeGkMIAp7\nsS3EFjGp9TiexlrciifxRws/C3hgUIgbxGSnf3FPhf9N0qw+qL+jUvpvrDcDIHr4tE+MT1r6fKUp\nxAYxQ6onJYo6vd7S5wLWNQHZHwTRw/dYWRFjhbRwbOv3vYtBTEvjOgqkJ/V8DrMCezv6nMfqfiDb\ngyEKm8Nb0rvX5Unk9mw/kG+GBDIM+zJveD71r8Lfqsf0OOo/aXidYnmjN4uDOIID+FWak+7CY7gq\nyL9FXzPS5myZntPtUR+TcvzdNYE34OeOMcq2rSpQ27xe2DM1ALnuDQZZmhwnsyA3NWhIPz0hvWM9\n/ODCwgMcxO8d4+SaLi5ykOs6Ot2CGxevN0q9X6V/OsbJtbQlzkGiS0OnKu5N4ObAGEttzkEie+q8\nNLzKuk3KYlE6WVzkIH8FBpiT3peyZgNjwJ/FRQ7yU2CAz2rubw2MQdbmHOTHwACfV9ybxMOBMahp\n87UGK3nW2QnVK4T7AnzndgZXF87zJ3Iahxr2RD8dkDZmZT0a4DvXQanjsRwEPg4I8EXN/YcCfOf6\nqN+PERurmQq/k9ITjxpWF91Y0X2rO32hS9OBED0Ntrp0Lz5UlWtWSqvj4j/nta8jNy4+0K0cVJdi\n1+IpaXG5UftjicblILoV6A7rf74xJVX22/geuEBHt5LpL9KR2qw0DNbjcXyoXYWxGFIDl0wLXRZF\n7EIvjwHE7q4QpDX/vksIsUfwXmmH4RyA9nsntkcC5Jo1usPQ+4cFUeiyOJ7OtU46NmibTnM7jbdx\n+ygBypqSCsptP+HYprp0NJCG8VHNjFQiXS+tUIuZ+KRUFzgi7ey+M2Yf1VxRpP4H+dEoOtaum3IA\nAAAASUVORK5CYII=\n'

我有一个 GUI 可以将此代码转换为图像,但是当我输入它并使用.toPlainText() 获取它时,它什么也没有。

如果我手动输入脚本,它会起作用:

如何定义一个变量来解决这个问题?

【问题讨论】:

  • @ekhumoro 我添加了:)
  • 怎么添加文字,是用setTex(),append()还是直接通过GUI粘贴?
  • @eyllanesc 我手动复制然后将其粘贴到屏幕上。然后我用 .toPlainText() 获取整个代码

标签: python-3.x base64 pyqt5


【解决方案1】:

问题在于toPlainTex() 返回的字符串实际上必须是bytearray,转换它的方法是使用ast.literal(),如下所示:

import ast

from PyQt5 import QtCore, QtGui, QtWidgets

class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        lay = QtWidgets.QVBoxLayout(self)
        self.textEdit = QtWidgets.QTextEdit()
        self.label = QtWidgets.QLabel()
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        button = QtWidgets.QPushButton("convert")
        lay.addWidget(self.textEdit)
        lay.addWidget(button)
        lay.addWidget(self.label)
        button.clicked.connect(self.on_clicked)

    def on_clicked(self):
        text = self.textEdit.toPlainText()
        try:
            data = ast.literal_eval(text)
            ba = QtCore.QByteArray.fromBase64(data)
            pixmap = QtGui.QPixmap()
            if pixmap.loadFromData(ba, "PNG"):
                self.label.setPixmap(pixmap)
        except SyntaxError:
            pass

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

【讨论】:

  • QByteArray.fromBase64() 抛出错误,因为它需要一个字节数组而不是字符串。相反,我使用了base64.b64decode()。
猜你喜欢
  • 2012-05-17
  • 2021-09-05
  • 2017-07-10
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 2018-09-07
  • 2014-07-21
  • 1970-01-01
相关资源
最近更新 更多