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

时间:2018-04-11 14:04:50

标签: python python-3.x pyqt pyqt4 qimage

我正在尝试加载图像(在这种情况下,jpeg来自字节,因为它是从Web内容下载的)。 我已经查阅了一些帖子(例如12),但出于某些原因我无法重现这些答案,尽管JPEG是PyQT4实施的格式,如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(..)返回False,无论我选择哪张图片,我都无法理解doc中函数的描述。我也直接从文件中查了一下:

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

是否有一些我错过的显而易见的东西,或者这是PyQt4与python 3的一些奇怪的混合?我很感激你的见解......

修改

我开始相信这里有一些错误(回复与我已经尝试过的一切都是一致的)。使用PyQt4 QImage(以及我怀疑的QPixmap)感觉不太对劲。

我目前正在使用Windows 10(并在办公室使用Windows 2008 Server),Winpython 3.6 x64,从Christoph Gohlke的unofficial depositery安装了PyQt4 4.11.4。

1 个答案:

答案 0 :(得分:3)

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

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_())

enter image description here

库:

  • 要求2.18.4
  • PyQt4 4.12.1
  • Python 2.7.14和Python 3.6.4

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

print(QImageReader.supportedImageFormats())