使用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实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
Jun 06 Python
Python随机生成手机号、数字的方法详解
Jul 21 Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 Python
使用Python搭建虚拟环境的配置方法
Feb 28 Python
Python3.5内置模块之time与datetime模块用法实例分析
Apr 27 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
Pycharm debug调试时带参数过程解析
Feb 03 Python
python实现电子词典
Mar 03 Python
django项目中新增app的2种实现方法
Apr 01 Python
python-jwt用户认证食用教学的实现方法
Jan 19 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实现图象锐化代码
2007/06/14 PHP
php中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
2013/11/07 PHP
PHP中的替代语法介绍
2015/01/09 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
JS重要知识点小结
2011/11/06 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
javascript从定义到执行 你不知道的那些事
2016/01/04 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
JS使用正则表达式获取小括号、中括号及花括号内容的方法示例
2018/06/01 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
2018/06/19 Javascript
Python读写Excel文件方法介绍
2014/11/22 Python
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
Python numpy 常用函数总结
2017/12/07 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
python list格式数据excel导出方法
2018/10/31 Python
python实现可逆简单的加密算法
2019/03/22 Python
python游戏开发之视频转彩色字符动画
2019/04/26 Python
python ubplot使用方法解析
2020/01/10 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
妇科医生自荐信
2013/11/05 职场文书
淘宝中秋节活动方案
2014/01/31 职场文书
总经理岗位职责范本
2014/02/02 职场文书
书香校园建设方案
2014/05/02 职场文书
应届大专生自荐书
2014/06/16 职场文书
汇报材料怎么写
2014/12/30 职场文书
公务员个人年终总结
2015/02/12 职场文书
2015年三年级班主任工作总结
2015/05/21 职场文书
法律意见书范本
2015/06/04 职场文书
SpringBoot实现异步事件驱动的方法
2021/06/28 Java/Android
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js