openpyxl 复制某些带图片的Excel时出现 KeyError: ‘.mpo‘

解决方案
在操作图片的py的头部加入如下代码:

from PIL import JpegImagePlugin
JpegImagePlugin._getmp = lambda  x:None

mime = mimetypes.types_map[True][ext]
KeyError: '.mpo’

使用Openpyxl 操作Excel里的图片时出现以上错误,百度了也没有,去google逛了一圈,发现是有一种image的mime类型为.mpo,而我的Excel里的图片明明为.png格式的。
样例如下:

>>> import PIL.Image
>>> img = PIL.Image.open('bob a.jpg')
>>> img.format
'MPO'
>>> PIL.PILLOW_VERSION
'2.7.0'

首先要知道openpyxl是使用Pillow来识别图片的
谷歌了以后发现,这个png图片,被pillow识别为.mpo文件,而openpyxl处理时不支持
而MPO格式的图片和JPEG图片很像
可能是Pillow识别格式为JPEG或者Png的时候多加了一个额外的Flag并且标记为MPO
所以我们可以在导入任何图片之前,在pillow识别图片之前,加上方的两行代码(我不知道他的意思,JpegImagePlugin是pillow用于处理图片的,应该是不对源图片加任何尾缀处理)。

参考链接
Using openpyxl: KeyError: ‘.mpo’ while saving Excel workboo
k

Jpeg image being identified as MPO

上一篇:哈工大操作系统系统调用实验二


下一篇:云端身份认证和访问管理