IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python如何检测文件或图片类型 -> 正文阅读

[Python知识库]python如何检测文件或图片类型

一、检测文件类型

简介

官方地址

这是小型且无依赖的Python包,用于推断文件类型和 MIME 类型,检查文件或缓冲区的幻数签名

特点

  • 简单友好的API
  • 支持多种文件类型
  • 提供文件扩展名和 MIME 类型推断
  • 按扩展名或 MIME 类型发现文件
  • 按种类发现文件(图像、视频、音频……)
  • Pluggable : 添加新的自定义类型匹配器
  • 快速,甚至处理大文件 只需要代表最大文件头的前
  • 261 个字节,
  • 因此您只需传递一个字节列表
  • 无依赖(只有 Python 代码,没有 C 扩展,没有 libmagic 绑定)
  • 跨平台文件识别

支持的文件类型

太多了,自己看吧,几乎常用文件都支持

支持的文件类型点我

安装

pip install filetype

使用

import filetype

def main(filename):
    kind = filetype.guess(filename)
    if kind is None:
        print('Cannot guess file type!')
        return

    print('File extension: %s' % kind.extension)
    print('File MIME type: %s' % kind.mime)

if __name__ == '__main__':
    main('111.png')

输出:

File extension: jpg
File MIME type: image/jpeg

为什么,我的文件是png图片,检测出来是jpg格式呢?模块当然没问题,只是我手动更改了文件后缀,所以此模块还有一个用途:
文件真实格式检测
1、可以检测是否篡改了文件后缀,例如图片文件
2、可以检测一部分文件时候进行文件隐藏合并

二、图片格式检测

一、PIL模块

安装

pip install Pillow

使用1:本地图片

from PIL import Image

img = Image.open('111.png')  # 真实为jpg,改后缀为png了
print(img.format)

输出:

JPEG

使用2:base64格式图片

import io
import base64
from PIL import Image

img_base64 = '这里填写图片base64编码'
img_byte = base64.b64decode(img_base64.encode())
img_io = io.BytesIO(img_byte)
img = Image.open(img_io)
print(img.format)

输出:

JPEG

二、 imghdr模块

功能描述:imghdr模块用于识别图片的格式。它通过检测文件的前几个字节,从而判断图片的格式。

唯一一个API

imghdr.what(file, h=None)

第一个参数file可以是用rb模式打开的file对象或者表示路径的字符串和PathLike对象。
第二个参数:h参数是字节。
函数返回表示图片格式的字符串。

支持的类型

返回值描述检测方式
jpeg用JFIF或者Exif格式保存的JPEG图片第7到第10个字节是b’JFIF’或者b’Exif’
png可移植网络图形格式(Portable Network Graphic Format)以字节串b’\x89PNG\r\n\x1a\n’开头
gifGIF(Graphics Interchange Format)的87版本和89版本前6个字节为b’GIF87a’或者b’GIF89a’
tiffTIFF(Tag Image File Format)的两种字节顺序前两个字节为b’MM’或者b’II’
rgbSGI ImgLib以字节串b’\x01\xda’开头
pbmPortable Bitmap第1个字节为b’P’,第2个字节为b’1’或b’4’,第3个字节为b’\t’或b’\n’或b’\r’
pgmPortable Graymap Files第1个字节为b’P’,第2个字节为b’2’或b’5’,第3个字节为b’\t’或b’\n’或b’\r’
ppmPortable Pixmap Files第1个字节为b’P’,第2个字节为b’3’或b’6’,第3个字节为b’\t’或b’\n’或b’\r’
rastSun Raster以字节串b’\x59\xA6\x6A\x95’开头
xbmX Bitmap Files以字节串b’#define ‘开头
bmpBitmap,Windows标准图像文件格式以字节串b’BM’开头
webp谷歌的WebP格式,Python3.5加入以字节串b’RIFF’开头并且第9到第12个字节为b’WEBP’
exrOpenEXR,Python3.5加入以字节串b’\x76\x2f\x31\x01’开头

简单使用——本地图片

import imghdr
imghdr.what('test.jpg')

输出:

jpeg

简单使用——爬虫网络图片

在写爬虫的时候如果爬取图片的话,在保存的时候我们需要知道图片的格式,不然gif的保存为了png什么的就动不起来了,但是有一些图片的格式是不太容易由url中识别出来的,比如有些图片的url是这个样子的:

http://www.xx.com/bar.png?element=bar

像这种要做后缀截取的话需要考虑很多情况,所以这个时候imghdr就派上用场了。

import imghdr
import uuid

import requests

url = 'xxxx'
response = requests.get(url)
save_name = uuid.uuid1().hex + "." + imghdr.what(None, response.content)  # python中uuid来生成机器唯一标识
print(save_name)
with open(save_name, 'wb') as img_file:
    img_file.write(response.content)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 09:54:14  更:2022-05-14 09:54:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 15:32:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计