Python3.6+Matplotlib读取JPG报错,已装Pillow仍无法解决
解决Matplotlib在Spyder中无法读取JPG图片的问题
嘿,我之前也碰到过一模一样的情况,尤其是在Win7+多Python环境的组合里,咱们一步步来排查:
1. 确认Pillow真的装到了Spyder用的Python环境里
Win7下的Spyder经常会出现「全局装了包,但Spyder依赖的Python环境没同步」的问题。你可以在Spyder的IPython控制台里输入这段代码验证:
import PIL print(PIL.__version__)
如果报错,说明Pillow没装对环境。解决办法:
- 打开Anaconda Prompt(如果你用Anaconda管理环境),先激活Spyder对应的环境(比如默认的
base环境:activate base) - 执行
pip install pillow或者conda install pillow重新安装 - 安装完成后一定要重启Spyder,再测试
2. 强制Matplotlib调用Pillow的读取接口
有时候Matplotlib会优先用内置的PNG阅读器,哪怕装了Pillow也不切换。你可以在代码开头加一段配置:
import matplotlib # 部分Win7环境需要指定后端,先试试这个 matplotlib.use('TkAgg') # 直接用plt的imread替代mpimg.imread from matplotlib.pyplot import imread
然后替换读取代码:
image = imread(r'C:\Users\xxx\Python Code\mountain.jpg')
3. 绕开Matplotlib,直接用Pillow读取转数组
如果上面的方法都不行,咱们换个思路:用Pillow读取图片后转成NumPy数组,再给Matplotlib用:
from PIL import Image import numpy as np import matplotlib.pyplot as plt # 用Pillow读取图片 img_pil = Image.open(r'C:\Users\xxx\Python Code\mountain.jpg') # 转成Matplotlib兼容的数组格式 image = np.array(img_pil) print('This image is: ',type(image), 'with dimensions:', image.shape) plt.imshow(image) plt.show()
4. 检查Matplotlib版本的兼容性
Python3.6对应的Matplotlib如果版本过低(比如2.0以下),对Pillow的支持可能有bug。你可以在Spyder里查版本:
import matplotlib print(matplotlib.__version__)
如果版本低于2.2,建议升级:
pip install --upgrade matplotlib
升级后记得重启Spyder生效。
5. 最后排查路径和图片本身
虽然你说另一台电脑正常,但还是可以试试:
- 把图片移到无空格、无特殊字符的路径下(比如
C:\temp\mountain.jpg),避免路径解析出错 - 用系统自带的图片查看器打开图片,确认没有损坏
内容的提问来源于stack exchange,提问作者Tanay
相关产品推荐
相关产品推荐

