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
相关产品推荐
相关产品推荐

