zoukankan      html  css  js  c++  java
  • python模块之imghdr检测图片类型

    1. imghdr是什么

    imghdr是一个用来检测图片类型的模块,传递给它的可以是一个文件对象,也可以是一个字节流。

    能够支持的图片格式:

    image

    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

  • 相关阅读:
    TP6框架中如何无刷新上传文件
    TP6框架设置验证码的宽度和高度后,验证码显示不全
    TP6模板缓存问题
    TP6管理后台实战第五天文章管理
    20211027技术人为什么建议写博客
    TP6管理后台实战第六天系统管理
    博客园自定义菜单
    xcat无法连接服务器
    lsf安装后配置
    xcat网络无盘启动——添加自定义安装包
  • 原文地址:https://www.cnblogs.com/cc11001100/p/7630528.html
Copyright © 2011-2022 走看看