使用python判断jpeg图片的完整性实例

 更新时间:2019年06月10日 11:37:19   作者:qiyuanxiong  
今天小编就为大家分享一篇使用python判断jpeg图片的完整性实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

用扩展名判断文件格式非常简单,但是有可能是错误的。 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中XML转JSON、XML转字典代码示例

    Python中XML转JSON、XML转字典代码示例

    大家都知道python的字典和json类似,那么可不可以先将xml转换成json再去做其他的事情呢,下面这篇文章主要给大家介绍了关于Python中XML转JSON、XML转字典的相关资料,需要的朋友可以参考下
    2024-02-02
  • 基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码

    基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码

    这篇文章主要介绍了基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Python中random模块用法实例分析

    Python中random模块用法实例分析

    这篇文章主要介绍了Python中random模块用法,实例分析了Python中random模块的使用技巧及字符串操作相关方法,需要的朋友可以参考下
    2015-05-05
  • python PyGame五子棋小游戏

    python PyGame五子棋小游戏

    大家好,本篇文章主要讲的是python PyGame五子棋小游戏,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • Python判断对象是否相等及eq函数的讲解

    Python判断对象是否相等及eq函数的讲解

    今天小编就为大家分享一篇关于Python判断对象是否相等及eq函数的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 利用Python和OpenCV库将URL转换为OpenCV格式的方法

    利用Python和OpenCV库将URL转换为OpenCV格式的方法

    这篇文章主要介绍了利用Python和OpenCV库将URL转换为OpenCV格式的方法,同时用到了NumPy和urllib,需要的朋友可以参考下
    2015-03-03
  • Python二分法搜索算法实例分析

    Python二分法搜索算法实例分析

    这篇文章主要介绍了Python二分法搜索算法,实例分析了Python实现二分法的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • python整合ffmpeg实现视频文件的批量转换

    python整合ffmpeg实现视频文件的批量转换

    这篇文章主要为大家详细介绍了python整合ffmpeg实现视频文件的批量转换,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • python获取微信小程序手机号并绑定遇到的坑

    python获取微信小程序手机号并绑定遇到的坑

    这篇文章主要介绍了python获取微信小程序手机号并绑定遇到的坑,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2018-11-11
  • 如何利用PyQt5美化你的GUI界面

    如何利用PyQt5美化你的GUI界面

    python的脚本开发简单,有时候只需几行代码就能实现丰富的功能,而且python本身是跨平台的,所以深受程序员的喜爱,下面这篇文章主要给大家介绍了关于如何利用PyQt5美化你的GUI界面的相关资料,需要的朋友可以参考下
    2022-01-01

最新评论