将图像文件从字节加载到 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())
我正在尝试加载图像(在这种情况下是从字节中加载的 jpeg,因为它是从 Web 内容下载的)。
我已经查阅了一些帖子(例如
假设要加载到 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())