使用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实现发送邮件功能
Jul 22 Python
Pycharm设置界面全黑的方法
May 23 Python
在Pycharm中修改文件默认打开方式的方法
Jan 17 Python
Python2与Python3的区别实例总结
Apr 17 Python
Python流行ORM框架sqlalchemy安装与使用教程
Jun 04 Python
python实现代码统计器
Sep 19 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
python 字典套字典或列表的示例
Dec 16 Python
Python中remove漏删和索引越界问题的解决
Mar 18 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
python 动态绘制爱心的示例
Sep 27 Python
Python OpenCV实现图形检测示例详解
Apr 08 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大转盘中奖概率算法实例
2014/10/21 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
各种常用的JS函数整理
2013/10/25 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
2017/05/03 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
学习 Vue.js 遇到的那些坑
2021/02/02 Vue.js
详解在Python程序中使用Cookie的教程
2015/04/30 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
python操作redis方法总结
2018/06/06 Python
Python 元组操作总结
2019/09/18 Python
PyTorch实现AlexNet示例
2020/01/14 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
文秘自荐信
2013/10/20 职场文书
少儿节目主持串词
2014/04/02 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
村党支部书记承诺书
2014/05/29 职场文书
小升初自荐信范文
2015/03/05 职场文书
活动总结书怎么写
2015/05/11 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
人事行政部各岗位职责说明书!
2019/07/15 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python