使用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 相关文章推荐
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
Python编程实现粒子群算法(PSO)详解
Nov 13 Python
Python闭包函数定义与用法分析
Jul 20 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
Jan 30 Python
Python传递参数的多种方式(小结)
Sep 18 Python
Python操作SQLite/MySQL/LMDB数据库的方法
Nov 07 Python
Python StringIO如何在内存中读写str
Jan 07 Python
关于pytorch中全连接神经网络搭建两种模式详解
Jan 14 Python
python连接打印机实现打印文档、图片、pdf文件等功能
Feb 07 Python
Pycharm生成可执行文件.exe的实现方法
Jun 02 Python
浅析Python 字符编码与文件处理
Sep 24 Python
Python对excel的基本操作方法
Feb 18 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中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
使用 JScript 创建 .exe 或 .dll 文件的方法
2011/07/13 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
ECMAScript6轮播图实践知识总结
2016/08/17 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
JavaScript对象拷贝与赋值操作实例分析
2018/12/10 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
Javascript的this详解
2019/03/23 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
Python模块学习 datetime介绍
2012/08/27 Python
Python中字符串的处理技巧分享
2016/09/17 Python
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
python同时遍历两个list用法说明
2020/05/02 Python
python中os包的用法
2020/06/01 Python
Python-for循环的内部机制
2020/06/12 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
完美解决Pycharm中matplotlib画图中文乱码问题
2021/01/11 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
介绍下WebSphere的安全性
2013/01/31 面试题
关于感恩的演讲稿500字
2014/08/26 职场文书
市场部岗位职责范本
2015/04/15 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
HTML基础详解(上)
2021/10/16 HTML / CSS
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫