python模块之imghdr检测图片类型
1. imghdr是什么
imghdr是一个用来检测图片类型的模块,传递给它的可以是一个文件对象,也可以是一个字节流。
能够支持的图片格式:

2. 如何使用
提供了一个api叫做imghdr.what,这个方法接受两个参数,第一个参数是一个文件对象,第二个参数是一个字节流数组。
文件对象用来对本地文件做检测,字节流用来对网络上的做检测。
当需要对文件进行检测的时候只传入第一个参数即可。
当需要对一个字节流检测的时候第一个参数传None,第二个参数传入字节流即可,当第二个参数被指定的时候第一个参数就会被忽略掉了所以值是什么无所谓
其返回值是一个字符串,是上面表格中的一个,表示检测到的此图片的类型。
2.1 对文件做检测:对磁盘文件检测
只传第一个参数的时候通常是对已经存储在本地磁盘上的文件检测一下格式,一个简单的例子如下:
#! /usr/bin/python import imghdr if __name__ == '__main__':
# 检测一个文件
with open('D:/foo.jpg', 'rb') as img_file:
print(imghdr.what(img_file))
输出:
jpeg
2.2 对流做检测:在爬虫中的应用
在写爬虫的时候如果爬取图片的话,在保存的时候我们需要知道图片的格式,不然gif的保存为了png什么的就动不起来了,但是有一些图片的格式是不太容易由url中识别出来的,比如有些图片的url是这个样子的:
http://www.foo.com/bar.png?foo=bar
像这种要做后缀截取的话需要考虑很多情况,搞很多用例来测试,有点得不偿失啊,所以这个时候imghdr就派上用场了。
这是一个简单的爬取图片检测后缀格式的例子:
#! /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:/')
参考资料:
1. https://docs.python.org/3.6/library/imghdr.html
python模块之imghdr检测图片类型的更多相关文章
- python模块之imghdr(识别不同格式的图片文件)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之imghdr(识别不同格式的图片文件) import imghdr '''>> ...
- python模块大全
python模块大全2018年01月25日 13:38:55 mcj1314bb 阅读数:3049 pymatgen multidict yarl regex gvar tifffile jupyte ...
- 用 Python 和 OpenCV 检测图片上的条形码
用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...
- 检查图片是否损坏、图片后缀是否与实际图片类型对应 - Python
图片工具 检查图片是否损坏 日常工作中,时常会需要用到图片,有时候图片在下载.解压过程中会损坏,而如果一张一张点击来检查就太不Cool了,因此我想大家都需要一个检查脚本: 测试图片,0.jpg是正常的 ...
- 扩展Python模块系列(五)----异常和错误处理
在上一节中,讨论了在用C语言扩展Python模块时,应该如何处理无处不在的引用计数问题.重点关注的是在实现一个C Python的函数时,对于一个PyObject对象,何时调用Py_INCREF和Py_ ...
- 1、Python模块和包(0602)
模块.异常.运行环境.mysqldb 模块: 顶层文件:作为整个文件的程序入口,就是负责去调用其他文件中的代码来实现程序流程功能的,称为顶层程序文件, 模块文件1 模块文件2 python模块 1.可 ...
- Python 模块EasyGui详细介绍
转载:无知小德 Python 模块EasyGui详细介绍 EasyGui 官网: http://easygui.sourceforge.net 官方的教学文档:http://easygui-docs- ...
- Python 模块 re (Regular Expression)
使用 Python 模块 re 实现解析小工具 概要 在开发过程中发现,Python 模块 re(Regular Expression)是一个很有价值并且非常强大的文本解析工具,因而想要分享一下此 ...
- 一、Python 模块EasyGui详细介绍
Python 模块EasyGui详细介绍 EasyGui 官网: -http://easygui.sourceforge.net 官方的教学文档: -easygui-docs-0.96\tutoria ...
随机推荐
- 设计模式PHP篇(三)————适配器模式
简单的适配器模式: interface Adaptor { public function read(); public function write(); } class File implemen ...
- 桥接,NAT,Host Only的区别
桥接,NAT,Host Only的区别 一.Brigde——桥接 :默认使用VMnet0fish批注:只要在虚拟机中将IP设对,即使宿主机的IP是错的,也可以通信.但是如此物理网卡被禁用了,则不能 ...
- python编码iso-8859-9编码问题
(2018-10-15) 路 2018骞�10鏈�16鏃�8:30鈥斺€�11:00锛屽湪鍏垽涓€搴叕寮€瀹$悊锛氬啀瀹$敵璇�.. (2018-10-15) 路 2018骞�10鏈�16鏃�8: ...
- mysql中事务
事务控制语言 什么叫做“事务”: 想象一个场景: 小明给小花 汇款 5000元 买 IPHONE,操作界面不用管,不管什么操作界面,最终都要落实到这样两条语句的执行: update 存款表 set ...
- mysql中变量
mysql中的变量: mysql中,有两种变量形式: 普通变量: 不带“@”符号: 定义形式: declare 变量名 类型名 [default 默认值]: //普通变量必须先这样定义 赋值 ...
- js get selected text
js get selected text https://stackoverflow.com/questions/3170648/how-to-get-javascript-select-boxs-s ...
- PC和FPGA间的串口通信实现
应用笔记 V1.0 2015/03/26 PC和FPGA间的串口通信实现 概述 本文将介绍PC和FPGA间的串口通信实现的基本思路和Verilog代码,对于通信而言,收发双方都要有相应的控制. ...
- ROC曲线【转】
受试者工作特征曲线(receiver operating characteristic curve, 简称ROC曲线),又称为感受性曲线(sensitivity curve).得此名的原因在于曲线上各 ...
- Windows与VMware中的CentOS系统互通访问
[步骤01]设置 CentOS 虚拟机-网络适配器为“桥接模式(直接连接物理网络),复制物理网络连接状态” [步骤02]配置虚拟网卡 [步骤03]配置 CentOS 网络 [步骤04]测试 windo ...
- P1054 等价表达式
题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的要求是判断选项中哪些代数 ...