我正在尝试加载图像(在这种情况下,jpeg来自字节,因为它是从Web内容下载的)。 我已经查阅了一些帖子(例如1和2),但出于某些原因我无法重现这些答案,尽管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。
答案 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_())
库:
验证适当的格式总是好的,为此你必须使用:
print(QImageReader.supportedImageFormats())