QImage:URL而不是文件路径?

问题描述 投票:0回答:2

此代码将光栅像素图分配给标签。 我可以简单地读取本地文件,而不是生成一个:

img = QtGui.QImage('/Users/user/Desktop/photo.jpg')

我想知道是否有办法指定 URL 链接而不是文件路径?然后

QLabel
会直接从网络获取它的像素图吗?

from PyQt4 import QtCore, QtGui


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    if not QtGui.QApplication.instance():
        app=QtGui.QApplication([])

    window = QtGui.QWidget()
    window.setLayout(QtGui.QVBoxLayout())

    img = QtGui.QImage(32, 32, QtGui.QImage.Format_RGB32)
    img.fill(QtCore.Qt.red)

    pixmap = QtGui.QPixmap(img)
    lbl = QtGui.QLabel()
    lbl.setPixmap(pixmap)

    icon = QtGui.QIcon(pixmap)
    window.layout().addWidget(lbl)

    window.show()
    sys.exit(app.exec_())
python qt pyqt pyside qwidget
2个回答
3
投票

据我所知,没有直接的方法让 QImage 或 QPixMap 直接从 URL 加载数据。但是您可以通过首先从 URL 中提取数据,然后将其加载到 QPixMap 来绕过这个问题。

从URL获取数据:

import urllib2 
url_data = urllib2.urlopen(path).read()

现在将其加载到您的 QPixMap 中:

pixmap = QPixmap()
pixmap.loadFromData(url_data)
lbl.setPixmap(pixmap)

值得一提的是,你应该尝试捕获像

urllib2.URLError
这样的异常 或
InvalidURL
,处理 URL 受保护的情况 (https) 等。


0
投票

'''

导入请求

''' imageurl = "这里是你的网址" 标题= { “用户代理”:“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/91.0.4472.124 Safari/537.36” }

尝试: 以 requests.get(image_url, headers=headers, stream=True) 作为响应: 响应.raise_for_status()

    # Read the content in chunks to handle large files
    url_data = b""
    for chunk in response.iter_content(chunk_size=8192):
        url_data += chunk

'''

# Continue with your image processing code
image = QImage()
image.loadFromData(url_data)
image_label = QLabel()
image_label.setPixmap(QPixmap(image))
# image_label.setFixedSize()  # Adjust the size as needed
layout.addWidget(image_label)

''' 除了 requests.HTTPError 为 e: print(f"检索图像失败。HTTP 错误:{e}") 除了异常 e: print(f"发生错误:{e}") '''

© www.soinside.com 2019 - 2024. All rights reserved.