使用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 getopt详解及简单实例
Dec 30 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
Sanic框架配置操作分析
Jul 17 Python
Python文件读写保存操作的示例代码
Sep 14 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
python文本数据处理学习笔记详解
Jun 17 Python
django框架自定义模板标签(template tag)操作示例
Jun 24 Python
Pandas之Fillna填充缺失数据的方法
Jun 25 Python
Django实现文件上传下载功能
Oct 06 Python
Python 创建TCP服务器的方法
Jul 28 Python
python statsmodel的使用
Dec 21 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 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执行速率优化技巧小结
2008/03/15 PHP
简单的php中文转拼音的实现代码
2014/02/11 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
JavaScript中setMonth()方法的使用详解
2015/06/11 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
Python中的类学习笔记
2014/09/23 Python
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
2018/12/13 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
考博自荐信
2013/10/25 职场文书
公司活动方案范文
2014/03/06 职场文书
幼儿园保育员岗位职责
2014/04/13 职场文书
安全生产年活动总结
2014/08/29 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
围城读书笔记
2015/06/26 职场文书
python中的getter与setter你了解吗
2022/03/24 Python
排查并解决MySQL生产库内存使用率高的报警
2022/04/11 MySQL
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL