You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QPixmap无法显示22MB大尺寸图片问题(PySide6/Python3.10)

问题描述

我有一张大小为22MB的图片,使用Python 3.10与PySide6编写如下代码:

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.im = QPixmap("C:/work/photos/123.JPG") 

        self.label = QLabel()
        self.label.setPixmap(self.im)
        self.label.resize(400, 400)

        self.grid = QGridLayout()
        self.grid.addWidget(self.label, 1, 1)
        self.setLayout(self.grid)

        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec())

该代码可正常显示其他图片,但无法显示这张特定图片。图片的Exif属性为:

  • ExifImageLength: 4912
  • ExifImageWidth: 7360

怀疑是图片本身或QPixmap的问题,请问这是什么原因?

原因分析与解决办法

1. 图片尺寸超出QPixmap限制

你的图片分辨率是7360×4912,这个尺寸大概率超过了QPixmap的默认最大纹理尺寸上限(不同系统、显卡的限制不一样,比如不少Windows系统默认限制在4096×4096左右),超过阈值后QPixmap就没法正常加载。

2. 图片编码或Exif异常

部分相机拍的JPG可能用了特殊压缩编码,或者Exif信息里有异常数据,导致QPixmap的解码器无法正确解析。

具体解决步骤

  • 先确认加载状态:在代码里加一行判断,明确是不是加载失败:
if self.im.isNull():
    print("图片加载失败")
  • 缩放后加载:用QImage先读取再缩放,绕开QPixmap的尺寸限制:
# 替换原有的self.im = QPixmap(...)这一行
img = QImage("C:/work/photos/123.JPG")
# 按比例缩放到label的尺寸
scaled_img = img.scaled(400, 400, Qt.KeepAspectRatio, Qt.SmoothTransformation)
self.im = QPixmap.fromImage(scaled_img)
  • 重新编码图片:用系统画图工具、Photoshop等重新保存这张图,去除异常Exif信息或重新编码后再尝试加载。

内容的提问来源于stack exchange,提问作者baton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:07:13