pil issues(updating)

一、im = Image.open(img_path) 报错如下:

/home/chuchienshu/.local/lib/python2.7/site-packages/PIL/TiffImagePlugin.py:692: UserWarning: Possibly corrupt EXIF data. Expecting to read 5876 bytes but only got 803. Skipping tag 34377
" Skipping tag %s" % (size, len(data), tag))

首先查了 Wikipedia ,了解到 exif 只是记录拍摄相机的各项参数的格式。

solution 可以参考这里

import piexif
piexif.remove(img)

其实就把上面两行代码加在每个图片处理前即可。p.s. 这并不是把 exif corrupt 的图片删除了,而是重写了有问题的 exif ,其实就是抹去 exif 部分信息。

续:然而,问题接踵而至。。在我继续在处理过 exif 问题的数据集上跑实验时,又报错如下,

IOError: image file is truncated (18 bytes not processed)

很明显的受损图片,脏数据也忒多了点~~

采用网上的简单方案一、

from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

发现并无报错,图片也可以显示出来了。但是大部分信息都丢失了,显然不是我们需要的。于是开始把这类图片从几十万张图中剔除出去。

for img_path in filelist:
img_path = os.path.join(root, img_path)

im = Image.open(img_path)
# im = im.resize( (size,size), Image.ANTIALIAS )

try:
    im.load()
except IOError:
    os.remove( img_path)
    print img_path

Image.open(img_path) 是一个懒操作;该函数只会读文件头,而真实的图像数据直到试图处理该数据才会从文件读取(调用 load() 方法将强行加载图像数据),这时,受损图片就会报 IOerror 进而可以 remove。达到剔除脏数据的目的。

Share this to:

发表评论

电子邮件地址不会被公开。 必填项已用*标注