使用python判断jpeg图片的完整性实例


Posted in Python onJune 10, 2019

用扩展名判断文件格式非常简单,但是有可能是错误的。 jpeg文件有固定的文件头,其文件头的格式如下:

Start Marker | JFIF Marker | Header Length | Identifier
 
0xff, 0xd8  | 0xff, 0xe0 |  2-bytes  | "JFIF\0"

所以可以通过文件头的方式快速判断文件格式:

def is_jpg(filename):
  data = open(filename,'rb').read(11)
  if data[:4] != '\xff\xd8\xff\xe0' and data[:4]!='\xff\xd8\xff\xe1': 
    return False
  if data[6:] != 'JFIF\0' and data[6:] != 'Exif\0': 
    return False
  return True

也可以通过PIL类库来做判断:

from PIL import Image
def is_jpg(filename):
  try:
    i=Image.open(filename)
    return i.format =='JPEG'
  except IOError:
    return Fals

应用场景:判断image文件夹中的jpeg文件是否完整,代码如下:

#coding=utf-8
#summary: 判断图片的有效性
import io
import os
 
from PIL import Image
#判断文件是否为有效(完整)的图片
#输入参数为文件路径
#会出现漏检的情况
def IsValidImage(pathfile):
 bValid = True
 try:
  Image.open(pathfile).verify()
 except:
  bValid = False
 return bValid
 
 
def is_valid_jpg(jpg_file): 
  """判断JPG文件下载是否完整 
  """ 
  if jpg_file.split('.')[-1].lower() == 'jpg': 
    with open(jpg_file, 'rb') as f: 
      f.seek(-2, 2) 
      return f.read() == '\xff\xd9' #判定jpg是否包含结束字段 
  else: 
    return True
 
#利用PIL库进行jpeg格式判定,但有些没有结束字段的文件检测不出来
def is_jpg(filename):
  try:
    i=Image.open(filename)
    return i.format =='JPEG'
  except IOError:
    return False
 
allfiles=os.listdir('image')
log_file=open('img_lossinfo.txt','w')
log = open('img_r.txt','w')
log_w=open('img_w.txt','w')
log1=open('img_jpeg.txt','w')
log2=open('img_notjpg.txt','w')
for i in allfiles:
#if 1:
	if i[-4:]=='.jpg':
		f=os.path.join('image',i)
		value=IsValidImage(f)
		if not value:
			log_file.write(i+'\n')
		if is_valid_jpg(f):
			print f
			log.write(i+'\n')
		else:
			log_w.write(i+'\n')
		if is_jpg(f):
			log1.write(i+'\n')
		else:
			log2.write(i+'\n')

以上这篇使用python判断jpeg图片的完整性实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python在windows下实现备份程序实例
Jul 04 Python
详谈python在windows中的文件路径问题
Apr 28 Python
python抓取网站的图片并下载到本地的方法
May 22 Python
基于python的selenium两种文件上传操作实现详解
Sep 19 Python
python 实现return返回多个值
Nov 19 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
用什么库写 Python 命令行程序(示例代码详解)
Feb 20 Python
Django框架获取form表单数据方式总结
Apr 22 Python
pytorch 常用函数 max ,eq说明
Jun 28 Python
python爬虫请求头设置代码
Jul 28 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
关于Python作用域自学总结
Jun 10 #Python
Python读写文件基础知识点
Jun 10 #Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 #Python
python三大神器之fabric使用教程
Jun 10 #Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 #Python
Python中的十大图像处理工具(小结)
Jun 10 #Python
在python下使用tensorflow判断是否存在文件夹的实例
Jun 10 #Python
You might like
php递归删除指定文件夹的方法小结
2015/04/20 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
2016/05/30 Javascript
JS代码实现根据时间变换页面背景效果
2016/06/16 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
浅入深出Vue之组件使用
2019/07/11 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
Python使用pymysql小技巧
2017/06/04 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
如何实现一个自定义类的序列化
2012/05/22 面试题
房地产员工找工作的自我评价
2013/11/15 职场文书
草船借箭教学反思
2014/02/03 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
共青团员自我评价范文
2014/09/14 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
感谢信的格式
2015/01/21 职场文书
骨干教师个人总结
2015/02/11 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
专项资金申请报告
2015/05/15 职场文书
小学中队委竞选稿
2015/11/20 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL