使用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实例之wxpython中Frame使用方法
Jun 09 Python
Python查看多台服务器进程的脚本分享
Jun 11 Python
Python实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
在Python中操作列表之List.pop()方法的使用
May 21 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
Feb 16 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 Python
python操作日志的封装方法(两种方法)
May 23 Python
django model的update时auto_now不被更新的原因及解决方式
Apr 01 Python
python基于socket模拟实现ssh远程执行命令
Dec 05 Python
用Python监控你的朋友都在浏览哪些网站?
May 27 Python
新手必备Python开发环境搭建教程
May 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 daddslashes 使用方法介绍
2012/10/26 PHP
PHP四种基本排序算法示例
2015/04/09 PHP
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
基于jquery创建的一个图片、视频缓冲的效果样式插件
2012/08/28 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
Angular使用动态加载组件方法实现Dialog的示例
2018/05/11 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
六个窍门助你提高Python运行效率
2015/06/09 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
线程同步的方法
2016/11/23 面试题
工商管理专业学生的自我评价
2013/10/01 职场文书
煤矿班组长岗位职责
2013/12/29 职场文书
写给父母的感谢信
2015/01/22 职场文书
小学生安全保证书
2015/05/09 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python
python内置模块之上下文管理contextlib
2022/06/14 Python
JS前端可视化canvas动画原理及其推导实现
2022/08/05 Javascript