大数据 Java开发手册 idea 常用快捷键 configuration Notify.js vue代码规范 js空格符 基于bootstrap的框架 mysql事务 mysql临时表 python线程 python3删除文件 pythoninput python调用函数 python如何调用函数 python中import用法 python如何定义变量 python基础代码 java时间 java初学 java安装配置 java时间戳转时间 java面向对象 java判断文件是否存在 java包名 java创建文件夹 java获取url参数 linux教学 php入门例子 javascript基础 rewritebase 房产证生成器 java程序设计基础 视频字幕提取器 反转颜色 firework下载 笔记本测试软件 dll下载 明解c语言 mysql时间比较
当前位置: 首页 > 学习教程  > python

python模块之imghdr检测图片类型

2021/2/6 22:19:39 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

python模块之imghdr检测图片类型 1. imghdr是什么 imghdr是一个用来检测图片类型的模块,传递给它的可以是一个文件对象,也可以是一个字节流。【仅仅根据文件后缀判断文件类型显然不准,在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')

 


本文链接: http://www.dtmao.cc/news_show_2000010.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?