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

Load image file from bytes into PyQt4.QtGui.QImage

我正在尝试加载图像(在这种情况下是从字节中加载的 jpeg,因为它是从 Web 内容下载的)。 我已经查阅了一些帖子(例如 & 2), but for some reason I can't reproduce those answers, though JPEG is a wholy implemented format by PyQT4 as stated in the doc.

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

我首先使用请求下载图片(虽然我确定这与这个特定问题无关 - 我把它放在这里主要是出于可移植性的原因...)。

import requests
r = requests.get(href, stream=True)
pict_bytes = r.content

之后,我可以使用 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(..) returns 随便选的图都是假的,doc里面的函数描述我看不懂。我也直接从文件中检查过:

with open('./test.jpeg', 'rb') as f:
    content = f.read()
qim.loadFromData(content)

我是否遗漏了一些明显的东西,或者这是 PyQt4 与 python 3 的一些奇怪行为?我将不胜感激您的见解...


编辑

我开始相信这里有一些错误(所有响应都与我已经尝试过的一致,以某种方式)。 PyQt4 QImage(以及我怀疑的 QPixmap)感觉有些不对劲。

我目前正在使用 Windows 10(并在办公室使用 Windows 2008 服务器),Winpython 3.6 x64,从 [= 安装 PyQt4 4.11.4 18=] 的 Christoph Gohlke。

你的例子不是很清楚,但你总是要做验证,为此你可以使用断言

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 4.12.1
  • Python 2.7.14 和 Python 3.6.4

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

print(QImageReader.supportedImageFormats())