python检测图像能否被打开_Python脚本检测损坏的图像

I wrote a python script to detect broken images and count them,

The problem in my script is it detects all the images and does not detect broken images. How to fix this. I refered :

My code

import os

from os import listdir

from PIL import Image

count=0

for filename in os.listdir('/Users/ajinkyabobade/Desktop/2'):

if filename.endswith('.JPG'):

try:

img=Image.open('/Users/ajinkyabobade/Desktop/2'+filename)

img.verify()

except(IOError,SyntaxError)as e:

print('Bad file : '+filename)

count=count+1

print(count)

解决方案

I have added another SO answer here that extends the PIL solution to better detect broken images.

I also implemented this solution in my Python script here on GitHub.

I also verified that damaged files (jpg) frequently are not 'broken' images i.e, a damaged picture file sometimes remains a legit picture file, the original image is lost or altered but you are still able to load it.

I quote the other answer for completeness:

You can use Python Pillow(PIL) module, with most image formats, to check if a file is a valid and intact image file.

In the case you aim at detecting also broken images, @Nadia Alramli correctly suggests the im.verify() method, but this does not detect all the possible image defects, e.g., im.verify does not detect truncated images (that most viewer often load with a greyed area).

Pillow is able to detect these type of defects too, but you have to apply image manipulation or image decode/recode in or to trigger the check. Finally I suggest to use this code:

try:

im = Image.load(filename)

im.verify() #I perform also verify, don't know if he sees other types o defects

im.close() #reload is necessary in my case

im = Image.load(filename)

im.transpose(PIL.Image.FLIP_LEFT_RIGHT)

im.close()

except:

#manage excetions here

In case of image defects this code will raise an exception.

Please consider that im.verify is about 100 times faster than performing the image manipulation (and I think that flip is one of the cheaper transformations).

With this code you are going to verify a set of images at about 10 MBytes/sec (modern 2.5Ghz x86_64 CPU).

For the other formats psd,xcf,.. you can use Imagemagick wrapper Wand, the code is as follows:

im = wand.image.Image(filename=filename)

temp = im.flip;

im.close()

But, from my experiments Wand does not detect truncated images, I think it loads lacking parts as greyed area without prompting.

I red that Imagemagick has an external command identify that could make the job, but I have not found a way to invoke that function programmatically and I have not tested this route.

I suggest to always perform a preliminary check, check the filesize to not be zero (or very small), is a very cheap idea:

statfile = os.stat(filename)

filesize = statfile.st_size

if filesize == 0:

#manage here the 'faulty image' case

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值