Python校验JPEG图片完整性的三种方法

周叙
周叙
发布时间:2026-10-13 | 3人浏览过
原创

本文介绍利用Python判断JPEG图片完整性的三种方法。首先解析固定文件头(JFIF/Exif)快速识别格式;其次使用PIL库的Image.open尝试解码;最后通过验证文件结束标记\xff\xd9及调用verify()方法检测文件是否损坏。适用于批量检查文件夹中图片是否下载完整或存在截断问题。

基于文件头的JPEG格式快速判断

仅依靠文件扩展名来判断文件格式并不可靠,因为扩展名可以被随意修改。JPEG文件具有固定的文件头结构,其标准格式包含特定的起始标记和标识符,具体结构如下所示:


Start Marker | JFIF Marker | Header Length | Identifier
 
0xff, 0xd8  | 0xff, 0xe0 |  2-bytes  | "JFIF\0"

因此,可以通过读取文件头数据来快速判断文件是否为JPEG格式。核心逻辑是检查前几个字节是否符合JPEG的标准标记:

使用PIL库进行格式识别


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

除了手动检查文件头,还可以借助Python的PIL(Pillow)类库来进行更稳健的判断。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 相关产品和应用

全部下载

专题列表