python模块之imghdr检测图片类型
1. imghdr是什么
imghdr是一个用来检测图片类型的模块,传递给它的可以是一个文件对象,也可以是一个字节流。
能够支持的图片格式:
2. 如何使用
提供了一个api叫做imghdr.what,这个方法接受两个参数,第一个参数是一个文件对象,第二个参数是一个字节流数组。
文件对象用来对本地文件做检测,字节流用来对网络上的做检测。
当需要对文件进行检测的时候只传入第一个参数即可。
当需要对一个字节流检测的时候第一个参数传None,第二个参数传入字节流即可,当第二个参数被指定的时候第一个参数就会被忽略掉了所以值是什么无所谓
其返回值是一个字符串,是上面表格中的一个,表示检测到的此图片的类型。
2.1 对文件做检测:对磁盘文件检测
只传第一个参数的时候通常是对已经存储在本地磁盘上的文件检测一下格式,一个简单的例子如下:
1 2 3 4 5 6 7 8 | #! /usr/bin/python import imghdr if __name__ = = '__main__' : # 检测一个文件 with open ( 'D:/foo.jpg' , 'rb' ) as img_file: print (imghdr.what(img_file)) |
1 | jpeg |
2.2 对流做检测:在爬虫中的应用
在写爬虫的时候如果爬取图片的话,在保存的时候我们需要知道图片的格式,不然gif的保存为了png什么的就动不起来了,但是有一些图片的格式是不太容易由url中识别出来的,比如有些图片的url是这个样子的:
像这种要做后缀截取的话需要考虑很多情况,搞很多用例来测试,有点得不偿失啊,所以这个时候imghdr就派上用场了。
这是一个简单的爬取图片检测后缀格式的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #! /usr/bin/python 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) with open (save_name, 'wb' ) as img_file: img_file.write(response.data) if __name__ = = '__main__' : ImageDownLoader.download( 'http://img3.doubanio.com/view/photo/albumcover/public/p2327732376.webp' , 'D:/' ) |
参考资料:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2016-10-06 Struts2拦截器之ExceptionMappingInterceptor(异常映射拦截器)
2016-10-06 Struts2之OGNL