写点什么

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

作者:技能实验室
  • 2022-10-19
    河南
  • 本文字数:1315 字

    阅读完需:约 1 分钟

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


'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 imghdrimg = '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 文件,就不对了;


例如这个地址是一个百度图片地址, https://t7.baidu.com/it/u=2511982910,2454873241&fm=193&f=GIF 从地址上看不出文件类型,保存时就不知道后缀是啥了;


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


代码如下:


import imghdrimport requests# https://t7.baidu.com/it/u=2511982910,2454873241&fm=193&f=GIFreponse = 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


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


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



发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022-07-26 加入

还未添加个人简介

评论

发布
暂无评论
python中的一个实用的库imghdr,用于探测图片格式_Python_技能实验室_InfoQ写作社区