一日一技:如何识别一张图片的格式

简介: 一日一技:如何识别一张图片的格式

摄影:产品经理重油重盐才好吃

在有些时候,我们拿到了一张图片的二进制数据,但却不知道这张图片应该是什么格式。例如,某个 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)

运行效果如下图所示:

这样一来,我们就成功识别了一张未知图片的格式了。

目录
相关文章
|
2月前
|
人工智能 自然语言处理 API
图片转音乐模型来了!Image to Music V2 :只需上传一张照片,自动转换成与图片内容匹配的音频!
图片转音乐模型来了!Image to Music V2 :只需上传一张照片,自动转换成与图片内容匹配的音频!
|
11月前
|
文字识别 算法 数据挖掘
文本检测 DBNet
文本检测 DBNet
263 0
|
20天前
【图片公式识别】图片公式转Word与LaTeX文档:智能识别与转换
【图片公式识别】图片公式转Word与LaTeX文档:智能识别与转换
50 4
|
2月前
|
文字识别 数据挖掘 网络安全
Python实现avif图片转jpg格式并识别图片中的文字
在做数据分析的时候有些数据是从图片上去获取的,这就需要去识别图片上的文字。Python有很多库可以很方便的实现OCR识别图片中的文字。这里介绍用EasyOCR库进行图片文字识别。easyocr是一个比较流行的库,支持超过80种语言,识别率高,速度也比较快。
30 2
|
7月前
|
计算机视觉 Python
对raw格式照片进行降噪处理
对raw格式照片进行降噪处理
48 0
|
6月前
|
存储 编解码 Cloud Native
音视频 ffmpeg命令提取像素格式
音视频 ffmpeg命令提取像素格式
|
9月前
|
机器学习/深度学习 编解码 自然语言处理
文本检测之SegLink
翻译:《Detecting Oriented Text in Natural Images by Linking Segments》
|
机器学习/深度学习 计算机视觉
【图片操作】提取GIF的图片帧
gif是我们日常生活中常用的一种图片,它介于视频和图片之间。我们可以用图片的内存体验到一些视频的感觉。但是有时候我们会想把gif的图片全部提取出来,今天我们就来实现一下这个操作。
333 0
|
11月前
|
存储 传感器 计算机视觉
CR2转PNG格式图像转换器
CR2是指由佳能公司开发的一种数字相机RAW图像格式,它存储了相机直接从图像传感器中读取的未经处理的图像数据。这种格式的图像通常比JPEG格式的图像更高质量,因为它们捕捉到了更多的细节和颜色深度,但它们也需要更多的后期处理才能得到最终的图像。
204 0
|
人工智能 前端开发 Linux
Python编程:利用ImageMagick转换PDF为图片并识别提取图表
Python编程:利用ImageMagick转换PDF为图片并识别提取图表
221 0