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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值