Imghdr:轻量级判断图像文件类型
我们可能很少遇到需要判断图片类型的情况,因为通过扩展名一下子就判断出来了,但是从网上大量的下载图片,将它们作为机器学习的材料时,可能会遇到大量的图片只有数据没有扩展名的情况,为了将图片信息标准化,你就需要确定每一张图片数据的类型,到底是 jpg、png 还是 bmp 呢?
遇到这种状况,该怎么办呢?去一个个尝试不同的软件打开吗?显然不是个事儿。你可能想通过解读文件信息来确定,请先别忙,让 imghdr 上!
imghdr,打开每张图片的神秘面纱
imghdr 是 Python 的标准库之一,用于确定一个文件是支持的图像类型之一。
这个模块会根据文件内容的前几个字节来猜测文件的格式,大部分情况下,都能够正确识别。
imghdr 模块在 Python 中出现的时间非常久远,虽然它不像一些流行的第三方库那般有名,但它在许多实际应用程序中仍然在默默地发挥作用。
比如 imghdr 和一些别的第三方图像处理库比如 Pillow[1] 相比,它更轻量级,更专注于判定图像类型。
如果你不需要复杂的图像处理功能,而只是想要判断出图像文件的类型,imghdr 是一个更快更方便的选择。
imghdr 模块支持所有现代的 Python 3 版本。
图片类型的检测
使用 imghdr 来识别图像类型非常简单,仅需要一两行代码。来看看基本的使用方法吧!
import imghdr
# 假设我们有一个名为 mysterious_image 的图像文件
image_type = imghdr.what('mysterious_image')
# 输出图像的类型
print(f"This image is of type: {image_type}")
imghdr.what() 函数接受图像文件的路径作为参数,返回文件的格式,如果无法识别,则返回 None。
支持的图像格式
imghdr 模块可以识别许多常见的图像格式,包括但不限于 gif, png, jpeg, bmp, tiff 等。目前支持的类型有:
值 | 图片类型 |
---|---|
rgb | SGI ImgLib Files |
gif | GIF 87a and 89a Files |
pbm | Portable Bitmap Files |
pgm | Portable Graymap Files |
ppm | Portable Pixmap Files |
tiff | TIFF Files |
rast | Sun Raster Files |
xbm | X Bitmap Files |
jpeg | JPEG data in JFIF or Exif formats |
bmp | BMP files |
png | Portable Network Graphics |
webp | WebP files |
exr | OpenEXR Files |
动手试试
为了让理论知识更加实践,你可以尝试以下练习:
- 抓取不同格式的图片到你的工作目录中。
- 编写一个脚本,使用 imghdr 模块来检测这些图片的格式。
- 遍历某一个目录,输出该目录下所有图像文件的类型。
通过这些简单的练习,你可以快速掌握 imghdr 的使用,并能在日常工作中发挥它的威力。
总结
imghdr 是一个在处理图像类文件时不可或缺的小工具。虽然它的功能相对单一,但正是这种专注使得它小巧而精致。在需要辨识图像类型时,它将是你代码工具箱中的一件利器。
当你下一次遇到无法识别图像类型的文件时,不妨让 imghdr 来揭开图片文件的神秘面纱。