有时候,我们拿到一张图片的二进制数据,却不知道这张图片应该是什么格式。比如一个HTTP接口返回给你一个一段Base64编码后的图片数据,如下图所示:这段Base64编码后的数据其实对应的是下面这张图片:那么问题来了,这张图片的格式是JPG还是PNG呢?是只有一帧的BMP还是GIF?也有一些网站的图片URL格式类似于:https://www.kingname.info/xx/yy/zz,并且URL中没有显示图片的格式。那么,当你用爬虫下载图片的时候,应该怎么保存呢?虽然在大多数情况下,你确实可以将一张PNG格式的图片保存为JPG,在电脑上双击打开。但是如果你要写一些程序来处理图片,那么图片的格式就很重要了。比如GIF有帧信息,而JPG没有。PNG图片有通道信息,JPG没有。如果你下载了一张JPG图片,却试图通过处理GIF来提取帧信息,显然会导致程序报错。要解决这个问题,可以使用常用的图像处理库Pillow。它可以轻松识别常见格式图片的格式。我们可以使用如下命令来安装Pillow:python3-mpipinstallPillow安装完成后,我们使用PIL导入图像处理模块Image:fromPILimportImageimg=Image.open('/Users/kingname/Dropbox/50e452c3504a6.jpg')print(img.format)如下图所示:一个JPG格式被成功识别为JPEG(JPG和JPEG是一回事)。但是显然,在我们大多数情况下,图片都是以二进制的形式存储在内存中,而不是在硬盘上。但是Image.open()接收到的参数是一个文件地址。我们需要让Pillow从内存中读取图片数据,生成图片对象后,查看其.format属性。这时候可以使用io模块将二进制数据打包成一个伪造的二进制文件句柄:img_byte)img=Image.open(img_io)print(img.format)效果如下图所示:这样,我们就成功识别了一张未知图片的格式。本文转载自微信公众号“闻所未闻的密码”,可通过以下二维码关注。转载本文请联系Code公众号。
