python模块之imghdr检测图片类型
2023-09-11 14:15:15 时间
python模块之imghdr检测图片类型
1. imghdr是什么
imghdr是一个用来检测图片类型的模块,传递给它的可以是一个文件对象,也可以是一个字节流。【仅仅根据文件后缀判断文件类型显然不准,在python有一个内置模块imghdr可以用来判断图片的真实类型。】
能够支持的图片格式:
2. 如何使用
提供了一个api叫做imghdr.what,这个方法接受两个参数,第一个参数是一个文件对象,第二个参数是一个字节流数组。
文件对象用来对本地文件做检测,字节流用来对网络上的做检测。
当需要对文件进行检测的时候只传入第一个参数即可。
当需要对一个字节流检测的时候第一个参数传None,第二个参数传入字节流即可,当第二个参数被指定的时候第一个参数就会被忽略掉了所以值是什么无所谓
其返回值是一个字符串,是上面表格中的一个,表示检测到的此图片的类型。
2.1 对文件做检测:对磁盘文件检测
只传第一个参数的时候通常是对已经存储在本地磁盘上的文件检测一下格式,一个简单的例子如下:
import imghdr
# 检测一个文件内部真实的文件类型
with open('./download/image/dog.jpg', 'rb') as f:
print(imghdr.what(f))
运行效果:
2.2 对流做检测:在爬虫中的应用
在写爬虫的时候如果爬取图片的话,在保存的时候我们需要知道图片的格式,不然gif的保存为了png什么的就动不起来了,但是有一些图片的格式是不太容易由url中识别出来的,比如有些图片的url是这个样子的:
http://www.foo.com/bar.png?foo=bar
像这种要做后缀截取的话需要考虑很多情况,搞很多用例来测试,有点得不偿失啊,所以这个时候imghdr就派上用场了。
这是一个简单的爬取图片检测后缀格式的例子:
import imghdr
import urllib3
import uuid
class Spider:
"""
蜘蛛侠,爬爬爬
"""
pool_manager = urllib3.PoolManager()
@staticmethod
def get(url):
return Spider.pool_manager.urlopen('GET', url)
class ImageDownLoader:
"""
图片下载器
"""
@staticmethod
def download(url, path):
"""
这个方法用来下载图片并保存
:param url: 图片的路径
:param path: 要保存到的路径
:return:
"""
response = Spider.get(url)
save_name = path + uuid.uuid1().hex + "." + imghdr.what(None, response.data) # python中uuid来生成机器唯一标识
with open(save_name, 'wb') as img_file:
img_file.write(response.data)
if __name__ == '__main__':
ImageDownLoader.download('https://img-bss.csdnimg.cn/1612337176796.png', 'C:\python\pachong\download\house')
相关文章
- python 上下文管理器
- Python快速学习03:运算 & 缩进和选择
- Python中random模块生成随机数详解
- python paramiko模块学习分享
- python使用cPickle模块序列化实例
- python 的 xlrd模块 读取Excel
- [Python] Statistical analysis of time series
- 【Python五篇慢慢弹(4)】模块异常谈python
- Python 字符串_python 字符串截取_python 字符串替换_python 字符串连接
- Python+selenium自动化测试元素操作
- paip.文件读写api php java python总结.txt
- Python 在编程语言中是什么地位?为什么很多大学不教 Python?
- Python语言学习:Python语言学习之python包/库package的简介(模块的封装/模块路径搜索/模块导入方法/自定义导入模块实现华氏-摄氏温度转换案例应用)、使用方法、管理工具之详细攻略
- Python每日一练——第17天:深入理解递归函数
- 已解决2. Set PROTOCOL_BUPFERS_PYTHON_iMPLEMENTATION=python (but this will use pure-Python parsing and w
- 【Python成长之路】python 基础篇 -- global/nonlocal关键字使用
- 如何优雅地实现Python通用多线程/进程并行模块
- python类型检测最终指南--Typing模块的使用
- Python编程:shelve模块-持久化python数据
- Python编程:itertools模块
- Python编程:安装python环境以及virtualenv虚拟环境
- Python编程:python中的计时器timeit模块
- Python编程:twine模块打包python项目上传pypi
- Python编程:pyenv管理多个python版本环境
- python与c#的交互模块pythonnet
- windows python install Matplotlib
- 《Fluent Python》读书笔记-1.4 产生表达式