使用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找出list中最常出现元素的方法
Jun 14 Python
python 系统调用的实例详解
Jul 11 Python
Python实现图片拼接的代码
Jul 02 Python
Python SMTP发送邮件遇到的一些问题及解决办法
Oct 24 Python
Python 支付整合开发包的实现
Jan 23 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
Python 实现文件读写、坐标寻址、查找替换功能
Sep 11 Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 Python
Python读写压缩文件的方法
Jul 30 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
详解python 内存优化
Aug 17 Python
python使用glob检索文件的操作
May 20 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定时计划任务的实现方法详解
2013/06/06 PHP
PHP中使用memcache存储session的三种配置方法
2014/04/05 PHP
php表单提交实例讲解
2015/11/12 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
php 可变函数使用小结
2018/06/12 PHP
PHP PDOStatement::bindValue讲解
2019/01/30 PHP
autoIMG 基于jquery的图片自适应插件代码
2011/03/12 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
京东优选小程序的实现代码示例
2020/02/25 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
从零学python系列之数据处理编程实例(二)
2014/05/22 Python
Python 爬虫的工具列表大全
2016/01/31 Python
Python爬取成语接龙类网站
2018/10/19 Python
PyCharm更改字体和界面样式的方法步骤
2019/09/27 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
python安装后的目录在哪里
2020/06/21 Python
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
警察群众路线整改措施
2014/09/26 职场文书
迟到检讨书范文
2015/01/27 职场文书
2015年安全生产责任书
2015/01/30 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
七年级英语教学反思
2016/02/15 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
Python自动化之批量处理工作簿和工作表
2021/06/03 Python
Python学习之时间包使用教程详解
2022/03/21 Python