使用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深入学习之内存管理
Aug 31 Python
Python中最常用的操作列表的几种方法归纳
Apr 24 Python
python中nan与inf转为特定数字方法示例
May 11 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
Jul 04 Python
Python编程实现正则删除命令功能
Aug 30 Python
Python OrderedDict的使用案例解析
Oct 25 Python
使用pygame写一个古诗词填空通关游戏
Dec 03 Python
使用python实现希尔、计数、基数基础排序的代码
Dec 25 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
Mar 16 Python
Django后端分离 使用element-ui文件上传方式
Jul 12 Python
一文搞懂python异常处理、模块与包
Jun 26 Python
python 管理系统实现mysql交互的示例代码
Dec 06 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 使用html5 XHR2实现上传文件与进度显示功能示例
2020/03/03 PHP
Firefox div高度自适应
2009/04/28 Javascript
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
jQuery实现自动调整字体大小的方法
2015/06/15 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
2015/11/01 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
微信小程序 POST请求的实例详解
2017/09/29 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
2020/11/11 Javascript
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
Python中逗号的三种作用实例分析
2015/06/08 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
使用TensorBoard进行超参数优化的实现
2020/07/06 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
加拿大在线隐形眼镜专家:PerfectLens.ca
2016/11/19 全球购物
怎样在程序里获得一个空指针
2015/01/24 面试题
vue项目实现分页效果
2021/03/24 Vue.js
劳资专员岗位职责
2013/12/27 职场文书
美德少年事迹材料
2014/01/23 职场文书
致标枪运动员广播稿
2014/02/06 职场文书
英语教师个人工作总结
2015/02/09 职场文书
法定授权委托证明书
2015/06/18 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS
Java Socket实现Redis客户端的详细说明
2021/05/26 Redis
ipad隐藏软件app图标方法
2022/04/19 数码科技