如何判断一个文件是否是jpeg格式?

       在处理训练样本的时候,有时你发现,虽然文件是jpg, jpeg结尾的,但是可能是被篡改过的,其实它有可能是png格式,假如这种图片很多,如何方便批处理呢?

       两种方式:

       (1) JPEG的文件布局如下:

       

JPEG SOI : FF D8  //  图片起始

JPEG APP0:0xFFE0  // 

    APP0 SIZE:1D 23  //当前标记的长度

    JFIF Flag:JFIF  // JFIF 标识

    VERSION:// 版本号

    ATTRIBUTION: // 长宽、DPI等信息


JPEG APP1: FF E1
  APP1 Size : 1C 45  //  注意:前面这三个WORD都是big endian的
  EXIF Flag : 'Exif', 0, 0
  ---------
  TIFF : // TIFF格式的EXIF数据
  ---------

JPEG APPn: FF En // APPn 标记,可选

DQT :0xFFDB  //Define Quantization Table,定义量化表


SOF0:0xFFC0  //Start of Frame,帧图像开始


DHT:0xFFC4  //Difine Huffman Table,定义哈夫曼表


SOS:0xFFDA  // Start of Scan,扫描开始 12字节


压缩数据


JPEG EOI : FF D9  //  图片结束

JPEG图片的标记

每一个JPEG文件的内容都开始于一个二进制的值 '0xFFD8', 并结束于二进制值'0xFFD9'。

所以,判断函数如下(is_jpg):

import os
import sys 
import cv2 
from PIL import Image

def is_jpg(filename):
        data = open(filename, "rb").read(11)
        if data[:2] != '\xff\xd8': 
                return False
        if data[-2:] != '\0xff\0xd9': 
                return False
        return True

def is_jpg_pil(filename):
        try:
                img = Image.open(filename)
                return img.format == "JPEG"
        except:
                return False

(2)通过PIL  Image直接判断:

如:上面的is_jpg_pil函数

 

参考博客:https://blog.csdn.net/shelldon/article/details/54144406(JPEG详细介绍)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

seasermy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值