检查图片是否损坏

日常工作中,时常会需要用到图片,有时候图片在下载、解压过程中会损坏,而如果一张一张点击来检查就太不Cool了,因此我想大家都需要一个检查脚本;

测试图片,0.jpg是正常的,broke.jpg是手动删掉一点内容后异常的:

脚本运行结果:

代码如下:

def is_valid_image(path):

'''

检查文件是否损坏

'''

try:

bValid = True

fileObj = open(path, 'rb') # 以二进制形式打开

buf = fileObj.read()

if not buf.startswith(b'\xff\xd8'): # 是否以\xff\xd8开头

bValid = False

elif buf[6:10] in (b'JFIF', b'Exif'): # “JFIF”的ASCII码

if not buf.rstrip(b'\0\r\n').endswith(b'\xff\xd9'): # 是否以\xff\xd9结尾

bValid = False

else:

try:

Image.open(fileObj).verify()

except Exception as e:

bValid = False

print(e)

except Exception as e:

return False

return bValid

flag1=is_valid_image(r'valid/0.jpg')

print(flag1)

flag1=is_valid_image(r'valid/broke.jpg')

print(flag1)

print ''

通过该脚本可以自动的对图片进行校验,后续是直接删除还是将正常、损坏分开就交给大家发挥啦;

图片后缀与实际类型匹配检验

我相信很多同学都有和我一样的习惯,在jpg不满足要求是,手动改为png,实际上大多数情况下,这种方式是可行的,但是在类型为gif等时,是无法直接打开的,这个需求的来源是我通过itchat做的自动微信内容备份工具

在下载聊天中的图片时,经常会下载到gif但是实际为jpg或者png的情况,这就导致这些图片无法直接展示,且需要手动改回实际类型,因此有了下面这个脚本;

类型校验转换前:

校验log:

校验及转换结果:

代码如下:

def is_type_wrong(path):

'''

检查文件后缀是否与实际对应,例如实际是jpg,后缀是gif,导致打不开

'''

print path

real_type = path[path.rfind('.')+1:]

print real_type

if path.lower().endswith('.gif') or path.lower().endswith('.jpg') or path.lower().endswith('.png'):

header = []

with open(path, 'rb') as f:

while(len(header)<5):

header.append(f.read(1))

print header

tmp = real_type

if (header[0] == '\x47' and header[1] and '\x49' and header[2] == '\x46' and header[3] == '\x38'):

tmp = 'gif'

if (header[0] == '\xff' and header[1] == '\xd8'):

tmp = 'jpg'

if (header[0] == '\x89' and header[1] == '\x50' and header[2] == '\x4e' and header[3] == '\x47' and header[4] == '\x0D'):

tmp = 'png'

print tmp

if real_type != tmp:

return True,tmp

return False,real_type

if __name__ == '__main__':

is_wrong,real_type=is_type_wrong('type/1.gif')

if is_wrong:

os.system('cp type/1.gif type/1.'+real_type)

is_wrong,real_type=is_type_wrong('type/2.gif')

if is_wrong:

os.system('cp type/2.gif type/2.'+real_type)

is_wrong,real_type=is_type_wrong('type/3.gif')

if is_wrong:

os.system('cp type/3.gif type/3.'+real_type)

is_wrong,real_type=is_type_wrong('type/4.gif')

if is_wrong:

os.system('cp type/4.gif type/4.'+real_type)

通过该脚本,可以自动的对图片的后缀以及其实际类型进行校验,配合linux的cp、mv等命令很容易的实现图片类型修正的功能,还是挺有用的感觉;

小结

实际上这两个脚本的运行都是依赖于图片文件自身具备的格式,对其固定格式进行检查,实现完整性、正确性的检验,大家也可以尝试这进行手动的修改类型,比如jpg改为png,手动损坏一个图片文件,比如直接txt打开后删掉一段即可来试试看哈;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

python下载文件损坏_Python检查图片是否损坏及图片类型是否正确过程详解相关推荐

  1. php android 图片上传,android上传图片到PHP的过程详解

    这篇文章主要介绍了android上传图片到PHP的过程详解,需要的朋友可以参考下 今天在做上传头像的时候,总是提交连接超时错误,报错信息如下:XXXXXXSokcetTimeOutXXXXXXXX 然 ...

  2. python下载文件保存_Python根据URL地址下载文件并保存至对应目录的实现

    引言 在编程中经常会遇到图片等数据集将图片等数据以URL形式存储在txt文档中,为便于后续的分析,需要将其下载下来,并按照文件夹分类存储.本文以Github中Alexander Kim提供的图片分类数 ...

  3. python绕过验证码登录_python接口自动化(十三)--cookie绕过验证码登录(详解)...

    简介 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接).获取不到也没关系,可以通过添加cookie的方式绕过验证码.(注意:并不是所有的 ...

  4. python下载文件保存_python 3.3 下载固定链接文件并保存的方法

    python 3.3 下载固定链接文件并保存. import urllib.request print ("downloading with urllib") url = 'htt ...

  5. python写界面文字游戏_Python:pygame游戏编程之旅五(游戏界面文字处理详解)

    再简单的游戏界面中均涉及文字处理,本节主要解读一下pygame模块中对文字及字体的处理方式. 同样,以实例进行讲解,先看看代码: #!/usr/bin/env python # -*- coding: ...

  6. python非贪婪匹配_Python中关于正则表达式非贪婪以及多行匹配功能详解

    这篇文章主要介绍了Python正则表达式非贪婪.多行匹配功能,结合实例形式分析了Python正则表达式中非贪婪及多行匹配功能的实现方法与相关注意事项,需要的朋友可以参考下 本文实例讲述了Python正 ...

  7. php返回图片给安卓_android上传图片到PHP的过程详解

    今天在做上传头像的时候,总是提交连接超时错误,报错信息如下:XXXXXXSokcetTimeOutXXXXXXXX 然后自己设置HTTP的超时时间: [java] view plaincopyprin ...

  8. python下载文件的11种方式_Python下载文件的11种方式

    在本教程中,你将学习如何使用不同的Python模块从web下载文件.此外,你将下载常规文件.web页面.Amazon S3和其他资源. 最后,你将学习如何克服可能遇到的各种挑战,例如下载重定向的文件. ...

  9. python下载文件暂停恢复_python下载文件记录黑名单的实现代码

    具体代码如下所示: #!/usr/bin/python # -*- coding: GBK -*- # -*- coding: UTF-8 -*- from ftplib import FTP imp ...

最新文章

  1. Python可视化(matplotlib)在图像中添加文本和标记(Text and Annotation)
  2. 策略模式和自定义排序规则
  3. android制作相册浏览器_电脑上用什么软件做电子相册
  4. 跟沈剑学习如何带领技术团队作战
  5. 用友云开发者中心助你上云系列之在线调试
  6. 服务器ip算是虚拟资产吗,云服务器算资产吗
  7. iPhone 12再陷“信号门”:用户称每天需多次重启恢复;蚂蚁集团打新资金退款如期到账;Mutt 2.0 发布|极客头条
  8. 历时 7 天,我把一万行 Scala 代码移植到了 Kotlin 上!
  9. POJ1703-Find them, Catch them
  10. 网站安全之为Web项目添加验证码功能(一)
  11. BigDecimal取整数
  12. 如何寻求知识产权的刑事救济
  13. 鸿蒙智联 HarmonyOS Connect 设备小艺语音的接入
  14. python 生成word表格(合并单元格)
  15. 【kernel exploit】CVE-2022-2588 Double-free 漏洞 DirtyCred 利用
  16. Opencv-python 色相饱和度(HLS)
  17. telephony 总篇
  18. 聊聊 Vue 中 provide/inject 的应用
  19. org.springframework.context.annotation.AnnotationConfigApplicationContext has not been refreshed yet
  20. 淘宝/Tmall商品详情页视频数据接口(视频数据,销量数据,sku属性数据,页面上有的数据均可以拿到,支持高并发)

热门文章

  1. 自然语言处理之情感分析与观点挖掘
  2. MM肚子里的小孩法号“妙音”
  3. 精彩的一期,龌龊的一期
  4. PHP实现购物车以及取消(现金+满减+积分)订单
  5. html表格不会自动变形,CSS 解决td里面内容太多把表格弄变形的原因,设置 自动换行。...
  6. Express框架之express-session的插件的攻坚战
  7. VUE中echart自适应外部div大小
  8. Linux系统压测、拷机软件汇总
  9. 淘淘商城--前台首页商品类目js展示
  10. 每日linux命令学习-引用符号(反斜杠\,单引号'',双引号)