python模块之imghdr检测图片类型

news/2024/7/5 2:07:02

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 uuidclass Spider:"""蜘蛛侠,爬爬爬"""pool_manager = urllib3.PoolManager()@staticmethoddef get(url):return Spider.pool_manager.urlopen('GET', url)class ImageDownLoader:"""图片下载器"""@staticmethoddef 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')

 


http://lihuaxi.xjx100.cn/news/268491.html

相关文章

树莓派:人在太空,刚下火箭,诚招小于19岁的代码开发者

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达博雯 发自 凹非寺 量子位 报道 | 公众号 QbitAI这是一位正在国际空间站执行任务的宇航员。再拉近一点,猜得出他身边这个一直在亮的小东西是什么吗?—…

leetcode002 add_two_numbers

""" 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可…

Python logging调用Logger.info方法的处理过程

本次分析一下Logger.info的流程 1. Logger.info源码: def info(self, msg, *args, **kwargs):"""Log msg % args with severity INFO.To pass exception information, use the keyword argument exc_info witha true value, e.g.logger.info("Houston, we …

syslog

syslog 使用syslog来记录调试信息调用的函数有: openlog/syslog/closelog openlog("a.out", LOG_PID | LOG_CONS, LOG_USER); // 打开系统记录的文件syslog(LOG_INFO, "this is my log info."); closelog(); // 关闭系统记录的文件syslog其实是一个守护…

让你的输入框使用Google云语音输入技术

2019独角兽企业重金招聘Python工程师标准>>> 只需一行代码,你的网站上面输入框(input),直接可以在谷歌浏览器(chrome)上面使用Google的云语音输入技术。 在你的输入框input的HTML属性里面&#…

爬取网站图片并保存到本地

第一步:模拟浏览器发出请求,获取网页数据 import requests# 目标网站 url https://baijiahao.baidu.com/s?id1687278509395553439&wfrspider&forpc # 头部伪装 headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Ge…

Android深度探索--HAL与驱动开发----第一章读书笔记

1.1 Android拥有非常完善的系统构架可以分为四层: 第一层:Linux内核。主要包括驱动程序以及管理内存、进程、电源等资源的程序 第二层:C/C代码库。主要包括Linux的.so文件以及嵌入到APK程序中的NDK代码 第三层:android SDK API …

引争议!硕导提议高校教师应多配偶,这样就能多生娃!高校的处理通报来了...

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达本文来源:学术会议资讯、华东政法大学、新浪微博等近日,华东政法大学法学院某包姓副研究员、硕导受到了广泛的关注,不是因为学术成果&…