python模块之imghdr检测图片类型

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')

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值