使用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抓取并保存html页面时乱码问题的解决方法
Jul 01 Python
Python实现的破解字符串找茬游戏算法示例
Sep 25 Python
Python实现的桶排序算法示例
Nov 29 Python
Python 实现12306登录功能实例代码
Feb 09 Python
PyCharm安装第三方库如Requests的图文教程
May 18 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
Jul 04 Python
python实现的汉诺塔算法示例
Oct 23 Python
python 实现按对象传值
Dec 26 Python
Tensorflow 实现释放内存
Feb 03 Python
Django中的模型类设计及展示示例详解
May 29 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
Jul 07 Python
使用Python画了一棵圣诞树的实例代码
Nov 27 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使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
2017/01/21 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
js中parseInt函数浅谈
2013/07/31 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
Python实现针对中文排序的方法
2017/05/09 Python
python如何使用unittest测试接口
2018/04/04 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
2019/07/25 Python
pandas 如何分割字符的实现方法
2019/07/29 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
拉丁舞学习者的自我评价
2013/10/27 职场文书
年会邀请函范文
2015/01/30 职场文书
导游词开场白
2015/01/31 职场文书
南京导游词
2015/02/03 职场文书
新郎新娘致辞
2015/07/31 职场文书
初中军训感言
2015/08/01 职场文书
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript