使用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网页请求urllib2模块简单封装代码
Feb 07 Python
Python操作MySQL简单实现方法
Jan 26 Python
Python爬虫获取整个站点中的所有外部链接代码示例
Dec 26 Python
Python操作mongodb的9个步骤
Jun 04 Python
python输入多行字符串的方法总结
Jul 02 Python
django的ORM操作 删除和编辑实现详解
Jul 24 Python
python经典趣味24点游戏程序设计
Jul 26 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 Python
在Tensorflow中实现梯度下降法更新参数值
Jan 23 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
Python爬虫过程解析之多线程获取小米应用商店数据
Nov 14 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
dede3.1分页文字采集过滤规则详说(图文教程)续二
2007/04/03 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
不安全的常用的js写法
2009/09/15 Javascript
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
javascript判断变量是否有值的方法
2015/04/20 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
js css实现垂直方向自适应的三角提示菜单
2016/06/26 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
Bootstrap treeview实现动态加载数据并添加快捷搜索功能
2018/01/07 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
python创建线程示例
2014/05/06 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
Python并行分布式框架Celery详解
2018/10/15 Python
使用pandas读取文件的实现
2019/07/31 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
python 实现兔子生兔子示例
2019/11/21 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
python如何控制进程或者线程的个数
2020/10/16 Python
药品促销活动方案
2014/02/14 职场文书
公司合作意向书
2014/04/01 职场文书
迟到检讨书范文
2015/01/27 职场文书
自我检讨书范文
2015/01/28 职场文书
工作失职自我检讨书
2015/05/05 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
python tkinter实现定时关机
2021/04/21 Python
Python竟然能剪辑视频
2021/05/25 Python