在有些时候,我们拿到了一张图片的二进制数据,但却不知道这张图片应该是什么格式。例如,某个 HTTP接口返回给你一段 Base64编码的图片数据,如下图所示:
这段 Base64编码的数据,实际上对应了下面这种图片:
那么问题来了,这张图片的格式是 JPG 还是 PNG?是 BMP 还是只有一帧的 GIF?
还有一些网站,他们的图片URL 格式类似于:https://www.528045.com/file/upload/202412/02/gmua4sqc0ak.jpg')
运行效果如下图所示:
成功把一张 JPG 格式识别为了 JPEG(JPG、JPEG 是同一个东西)。但显然,我们大多数情况下,图片是以二进制的形式存放到内存中的,而不是放在硬盘中。但Image.open()接收的参数是一个文件地址。我们需要让 Pillow 从内存中读取图片数据,生成图片对象以后,查看它的.format属性。
这个时候,就可以使用io模块,把二进制的数据包装成一个假的二进制文件句柄:
- import io
- import base64
- from PIL import Image
-
- img_base64 = '图片对应的 base64'
- img_byte = base64.b64decode(img_base64.encode())
- img_io = io.BytesIO(img_byte)
- img = Image.open(img_io)
- print(img.format)
运行效果如下图所示:
这样一来,我们就成功识别了一张未知图片的格式了。
本文转载自微信公众号「未闻Code」,可以通过以下二维码关注。转载本文请联系未闻Code公众号。