使用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入门篇之列表和元组
Oct 17 Python
Python对列表排序的方法实例分析
May 16 Python
构建Python包的五个简单准则简介
Jun 15 Python
Python使用bs4获取58同城城市分类的方法
Jul 08 Python
python开发之文件操作用法实例
Nov 13 Python
50行Python代码实现人脸检测功能
Jan 23 Python
Python 通过调用接口获取公交信息的实例
Dec 17 Python
用python实现英文字母和相应序数转换的方法
Sep 18 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
Sep 25 Python
python安装scipy的步骤解析
Sep 28 Python
python获取array中指定元素的示例
Nov 26 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 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
解析isset与is_null的区别
2013/08/09 PHP
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
PHP简单留言本功能实现代码
2017/06/09 PHP
给Function做的OOP扩展
2009/05/07 Javascript
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
Javascript浅谈之this
2013/12/17 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
JavaScript中字面量与函数的基本使用知识
2015/10/20 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
python处理图片之PIL模块简单使用方法
2015/05/11 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
python的re模块使用方法详解
2019/07/26 Python
在django中,关于session的通用设置方法
2019/08/06 Python
python代码区分大小写吗
2020/06/17 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
新闻系毕业生推荐信
2013/11/16 职场文书
国培教师自我鉴定
2014/02/12 职场文书
就业协议书样本
2014/08/20 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
三十年同学聚会感言
2015/07/30 职场文书
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers