社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

两行 Python 代码,精准识别一张图片的格式

Python编程时光 • 4 年前 • 451 次点击  
在有些时候,我们拿到了一张图片的二进制数据,但却不知道这张图片应该是什么格式。例如,某个 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)
运行效果如下图所示:
这样一来,我们就成功识别了一张未知图片的格式了。







推荐阅读  点击标题可跳转
卸载 PyCharm!这才是Python小白的最理想的 IDE
牛逼至极!用这个神器看代码太舒服了
情人节表白神器,v2.0 版本
边玩边学,4个 Python 的编程游戏网站
围观大神是如何用 Python 处理文件的?
一个中科大差生的 8年 程序员工作总结
得本文对你有帮助?请分享给更多人
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/108109
 
451 次点击