Python 将图像文件从字节加载到PyQt4.QtGui.QImage

Python 将图像文件从字节加载到PyQt4.QtGui.QImage,python,python-3.x,pyqt,pyqt4,qimage,Python,Python 3.x,Pyqt,Pyqt4,Qimage,我正在尝试加载一个图像(在这种情况下是从字节加载的jpeg,因为它是从web内容下载的)。 我已经查阅了一些帖子(例如和),但由于某些原因,我无法复制这些答案,尽管JPEG是PyQT4完整实现的格式,如本文中所述 假设要加载到QImage中的图片是这样的 我第一次使用request下载图片(尽管我确定这与这个特定的问题无关——我把它放在这里主要是出于可移植性的原因…) 之后,我可以使用PIL和io模块检查此图像是否100%正确: from PIL import Image import io i

我正在尝试加载一个图像(在这种情况下是从字节加载的jpeg,因为它是从web内容下载的)。 我已经查阅了一些帖子(例如和),但由于某些原因,我无法复制这些答案,尽管JPEG是PyQT4完整实现的格式,如本文中所述

假设要加载到QImage中的图片是这样的

我第一次使用request下载图片(尽管我确定这与这个特定的问题无关——我把它放在这里主要是出于可移植性的原因…)

之后,我可以使用PIL和io模块检查此图像是否100%正确:

from PIL import Image
import io
image = Image.open(io.BytesIO(pict_bytes))
image.show()
image.save('./test.jpeg')
在尝试将字节转换为QImage时,它会变得混乱:

from PyQt4 import QtGui
qim = QtGui.QImage()
qim.loadFromData(pict_bytes)
不管我选择了什么图片,qim.loadFromData(..)都返回False,这是关于函数在。我还直接从文件中进行了检查:

with open('./test.jpeg', 'rb') as f:
    content = f.read()
qim.loadFromData(content)
我是否错过了一些明显的东西,或者这是PyQt4与Python3的某种奇怪的组合?我将非常感谢您的见解


编辑

我开始相信这里有一些bug(在某种程度上,回答都与我已经尝试过的内容一致)。PyQt4 QImage(以及我怀疑的QPixmap)有点不对劲


我目前使用的是Windows 10(办公室使用的是Windows 2008 Server),Winpython 3.6 x64,PyQt4 4.11.4是从Christoph Gohlke的网站安装的。

您的示例不太清楚,但您必须始终进行验证,因此您可以使用assert

import sys

import requests
from PyQt4.QtGui import QImage, QApplication, QLabel, QPixmap

app = QApplication(sys.argv)
href = "https://upload.wikimedia.org/wikipedia/commons/thumb/6/6f/OrteliusWorldMap.jpeg/800px-OrteliusWorldMap.jpeg"
r = requests.get(href, stream=True)

assert r.status_code == 200

img = QImage()
assert img.loadFromData(r.content)
w = QLabel()
w.setPixmap(QPixmap.fromImage(img))
w.show()
sys.exit(app.exec_())

图书馆:

  • 请求2.18.4
  • PyQt4.12.1
  • Python 2.7.14和Python 3.6.4

验证适当的格式总是好的,为此,您必须使用:

print(QImageReader.supportedImageFormats())

很抱歉,这没有改变任何内容:assert img.loadFromData(r.content)引发错误,因为它无法从字节加载任何数据。这似乎证实了我的怀疑,这里可能有一些bug。我会先尝试更新我的软件包,让你知道…@tgrandje我已经添加了我的库的版本,你有什么版本?我刚刚用它更新了我的帖子。当您使用python 2.7时,我开始认为这是来自于使用python 3.6(我学到了在从27升级到3.6时,PyQt4的某些部分需要以不同方式处理的艰难过程)@tgrandje我已经用这两种方法进行了检查。我刚刚试过使用python 2.7,它确实工作正常
print(QImageReader.supportedImageFormats())