在有些时候,我们拿到了一张图片的二进制数据,但却不知道这张图片应该是什么格式。例如,某个 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 -m pip install pillow
安装完成以后,我们使用PIL导入图片处理的模块Image:
- from PIL import Image
- img = Image.open('/Users/kingname/Dropbox/50e452c3504a6.jpg')
- print(img.format)
运行效果如下图所示:
成功把一张 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公众号。
本文转载自公众号读芯术(ID:AI_Discovery) 如果你即将要面临大型科技公司的技术...
开源 RPC 框架有哪些呢?一类是跟某种特定语言平台绑定的,另一类是与语言无关即...
为了使伸缩组自动加入的实例自动部署应用,您需要创建私有镜像,确保该镜像上有...
一、背景 ? 我们大部分人的编程习惯都是线性编程,所谓线性编程就是一个请求涉及...
一、数据中台是真的热 在2018年之前可能只有一少部分人在谈中台,从2018年下半年...
计算的下一步发展是什么,将如何影响组织的战略?专家预测了边缘计算在2021年的发...
来源 | 阿里飞天CIO学堂微信公众号 金融数字化转型过程中,市场的细微变化,客户...
与普通的IDC机房或服务器厂商相比,阿里云提供的云服务器ECS具有高可用性、安全...
游戏市场的热度已经不言而喻,随着民众生活水平的提升,大家对于精神娱乐生活的...
最近,在为 Coco 优化分层架构之时,我陷入了各种决策困难之中。所以我通过不断...