• python中的一个实用的库imghdr—用于探测图片格式


    之前没有注意到,图片格式竟然有这么多种;

    • 'rgb' SGI 图像库文件
    • 'gif' GIF 87a 和 89a 文件
    • 'pbm' 便携式位图文件
    • 'pgm' 便携式灰度图文件
    • 'ppm' 便携式像素表文件
    • 'tiff' TIFF 文件
    • 'rast' Sun 光栅文件
    • 'xbm' X 位图文件
    • 'jpeg' JFIF 或 Exif 格式的 JPEG 数据
    • 'bmp' BMP 文件
    • 'png' 便携式网络图像
    • webp' WebP 文件
    • 'exr' OpenEXR 文件

    其中最常见的是png和jpeg了,通常都是通过文件名后缀来判断图片格式,但是都知道,这个后缀可以随意更改,不太准;

    python内置了一个检测图片格式的库:

    imghdr

    imghdr是一个用来检测图片类型的模块,提供了一个api叫做

    imghdr.what
    

    传递给它的可以是一个文件对象,也可以是一个字节流; 然后防护一个图片格式;

    参考imghdr的源码发现,其对图片做了一次遍历检测,看最终匹配到哪个结果;

    tests = []
    
    def test_jpeg(h, f):
        """JPEG data in JFIF or Exif format"""
        if h[6:10] in (b'JFIF', b'Exif'):
            return 'jpeg'
    
    tests.append(test_jpeg)
    
    def test_png(h, f):
        if h.startswith(b'\211PNG\r\n\032\n'):
            return 'png'
    
    tests.append(test_png)
    
    def test_gif(h, f):
        """GIF ('87 and '89 variants)"""
        if h[:6] in (b'GIF87a', b'GIF89a'):
            return 'gif'
    
    tests.append(test_gif)
    复制代码

    简单使用;

    imgdr是内置库,所以不需要安装,直接导入即可

    import imghdr
    

    imghdr.what()可以接收一个文件路径,也可以接收一个文件对象。输出一个文件类型

    • 代码参考如下:
    import imghdr
    img = 'H://sz-1.png'
    print(imghdr.what(img))
    with open(img,'rb') as f:
        type = imghdr.what(f)
        print(type)
    复制代码

    以上代码实用性不强,但是如果给imghdr,what的是一个url地址,然返回一个文件类型。就很有用途,比如在爬虫下载文件的时候,图片是一个gif类型,下载的时候保存成png或jpg文件,就不对了;

    例如这个地址是一个百度图片地址, t7.baidu.com/it/u=251198… 从地址上看不出文件类型,保存时就不知道后缀是啥了;

    如果可以知道文件类型,在下载时就可以指定文件后缀名称;不至于将gif保存成png;

    代码如下:

    import imghdr
    import requests
    # https://t7.baidu.com/it/u=2511982910,2454873241&fm=193&f=GIF
    reponse = requests.get('https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF')
    type = imghdr.what(None,reponse.content)
    print(type)
    with open('H://1.'+type,'wb') as f:
        f.write(reponse.content)
    复制代码

    因为要请求图片,需要用到requests这个库;

    requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到,Requests是Python语言的第三方的库,专门用于发送HTTP请求

    安装方式推荐使用pip

    pip 是 Python 的包安装程序。其实,pip 就是 Python 标准库(The Python Standard Library)中的一个包,只是这个包比较特殊,用它可以来管理 Python 标准库(The Python Standard Library)中其他的包。pip 是一个命令行程序。 安装 pip 后,会向系统添加一个 pip 命令,该命令可以从命令提示符运行。

    安装requests命令如下:

    pip install requests
    

    库比较简单,等待安装完成即可;

    运行代码,检测图片类型;

     今天就到这啦 ~ 想学习更多知识点个关注哦,后续更新更多Python知识。

     

  • 相关阅读:
    构建健壮的Spring MVC应用:JSON响应与异常处理
    [附源码]java毕业设计四六级考试管理系统
    图解Mysql索引原理
    数据结构与算法之图的应用
    node爬虫爬取小说
    jQuery【事件】
    人活着最重要的是什么
    关于Pickle反序列化的研究总结和一道例题
    2022高教社杯辅导 答疑 选题 代码 思路 全国大学生数学建模竞赛
    ext文件系统
  • 原文地址:https://blog.csdn.net/m0_72557783/article/details/126310392