【问题标题】:Load image file from bytes into PyQt4.QtGui.QImage将图像文件从字节加载到 PyQt4.QtGui.QImage
【发布时间】:2018-04-12 04:12:41
【问题描述】:

我正在尝试加载图像(在这种情况下是从字节中下载的 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。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 抱歉,这并没有改变任何东西:assert img.loadFromData(r.content) 引发错误,因为它无法从字节加载任何数据.这似乎证实了我的怀疑,这里可能存在一些错误。我会先尝试更新我的包并让你知道...
    • @tgrandje 我已经添加了我的库的版本,你有哪些版本?
    • 我刚刚用它更新了我的帖子。当您使用 python 2.7 时,我开始认为这是来自使用 python 3.6 (我已经了解到从 27 升级到 3.6 时 PyQt4 的某些部分需要以不同方式处理)我>
    • @tgrandje 我都检查过了。
    • 我刚刚尝试了 python 2.7,它确实可以正常工作
    猜你喜欢
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多