600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > python PIL open 无法打开 webp jpeg等图像 报错 PIL.UnidentifiedImageError: cannot identify image file

python PIL open 无法打开 webp jpeg等图像 报错 PIL.UnidentifiedImageError: cannot identify image file

时间:2020-02-12 15:34:58

相关推荐

python PIL open 无法打开 webp jpeg等图像  报错 PIL.UnidentifiedImageError: cannot identify image file

问题:使用 PIL.Image.open() 能正常打开大部分图像文件,但是webp格式的图像无法打开,有一些jpg,png图像也无法打开,报错:

PIL.UnidentifiedImageError: cannot identify image file xxx

测试发现,这些图像在windows环境下使用图片查看器能正常查看,说明不是image file本身的问题。

from PIL import Image# im_path = './test.webp'im_path = './test.jpg'im = Image.open(im_path, 'r')print(im)

同时,上述代码能够打开其他正常的图像,说明代码没有问题。

一、无法打开webp文件

1. 查看本机是否有webp支持

可能是pillow包的问题导致图像无法打开,在安装pillow包的时候没有webp的支持,导致无法读取webp文件。

可以通过下面的方式查看本机已安装的pillow是否有webp的支持:

from PIL import featuresprint(features.pilinfo()) # info of pillow# print(features.check_module('webp')) # if webp support, True or False

从下面这段代码的输出结果(红色字体部分)可以看出,本机安装的pillow没有webp支持

--------------------------------------------------------------------

Pillow 8.0.1

Python 3.7.9 (default, Aug 31 , 12:42:55)

[GCC 7.3.0]

--------------------------------------------------------------------

Python modules loaded from /home/xxx/python3.7/site-packages/PIL

Binary modules loaded from /home/xxx/python3.7/site-packages/PIL

--------------------------------------------------------------------

--- PIL CORE support ok, compiled for 8.0.1

--- TKINTER support ok

--- FREETYPE2 support ok, loaded 2.10.4

--- LITTLECMS2 support ok, loaded 2.10

*** WEBP support not installed

*** WEBP Transparency support not installed

*** WEBPMUX support not installed

*** WEBP Animation support not installed

--- JPEG support ok, compiled for 9.0

*** OPENJPEG (JPEG2000) support not installed

--- ZLIB (PNG/ZIP) support ok, loaded 1.2.11

--- LIBTIFF support ok, loaded 4.1.0

*** RAQM (Bidirectional Text) support not installed

*** LIBIMAGEQUANT (Quantization method) support not installed

*** XCB (X protocol) support not installed

--------------------------------------------------------------------

BLP

Extensions: .blp

Features: open

--------------------------------------------------------------------

BMP image/bmp

Extensions: .bmp

Features: open, save

--------------------------------------------------------------------

.........................这里省略..............................................

--------------------------------------------------------------------

XPM image/xpm

Extensions: .xpm

Features: open

--------------------------------------------------------------------

XVTHUMB

Features: open

--------------------------------------------------------------------

None

2. 安装webp支持,重装pillow包

首先要为本机安装webp的支持,然后重新安装pillow包。

对于unix系的电脑,输入以下命令安装webp支持:

sudo apt-get install libwebp-dev

对于maxos,命令如下:

brew install webp

然后需要重新安装anaconda中pillow包。为了保险,建议读者最好新建一个anaconda虚拟环境,然后在新建的环境中对包进行卸载和重装,避免重装过程中出现问题导致现有环境出错,那就哭都没地方哭了。。。。。。

conda uninstall pillowconda install pillow

然后测试,发现pillow已经有webp的支持了。

--------------------------------------------------------------------

Pillow 9.4.0

Python 3.7.9 (default, Aug 31 , 12:42:55)

[GCC 7.3.0]

--------------------------------------------------------------------

Python modules loaded from /home/xxx/python3.7/site-packages/PIL

Binary modules loaded from /home/xxx/python3.7/site-packages/PIL

--------------------------------------------------------------------

--- PIL CORE support ok, compiled for 9.4.0

--- TKINTER support ok, loaded 8.6

--- FREETYPE2 support ok, loaded 2.12.1

--- LITTLECMS2 support ok, loaded 2.12

--- WEBP support ok, loaded 1.2.4

--- WEBP Transparency support ok

--- WEBPMUX support ok

--- WEBP Animation support ok

--- JPEG support ok, compiled for 9.0

*** OPENJPEG (JPEG2000) support not installed

--- ZLIB (PNG/ZIP) support ok, loaded 1.2.13

--- LIBTIFF support ok, loaded 4.5.0

*** RAQM (Bidirectional Text) support not installed

*** LIBIMAGEQUANT (Quantization method) support not installed

*** XCB (X protocol) support not installed

--------------------------------------------------------------------

........后面的输出结果省略........

3.测试读取webp文件

from PIL import Imageim_path = './test.webp'im = Image.open(im_path, 'r')print(im)

成功!

二、读取某些jpg文件也报错PIL.UnidentifiedImageError: cannot identify image file xxx

这个问题在安装webp支持并且重装pillow之后也会得到解决。

原因在于,这些jpg图像文件本身是webp格式,在保存为图像的时候后缀写成了 .jpg 或者 .png 等,在windows环境或者一些特定的图像查看器,这样的图像文件可以正常打开。

但是pillow包和部分图像查看器无法正确识别该图像文件的格式,所以PIL无法成功读取文件。

因此,在安装webp支持后,该问题也得到解决。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。