如何可靠地确定文件是否为图像文件?

如何可靠地确定文件是否为图像文件?

目前我正在使用以下命令:

file image.jpg | cut -d " " -f 2

到目前为止,一切都很好。它也适用于没有图像扩展名的文件。所以,我想知道是否还有其他方法可以做到这一点?我可能还没有看到上述代码会失败的特定情况。

编辑:我正在尝试创建一个脚本来按顺序重命名目录中的图像文件。

答案1

ImageMagick 项目具有识别图像的功能。

我一直在使用 ImageMagick,包括它的命令行“识别”功能,并且识别图片从未失败过。

请注意,它提供的不仅仅是格式,例如:

$  identify tmp3.jpg 
tmp3.jpg JPEG 1680x1050 1680x1050+0+0 DirectClass 8-bit 293.582kb 

$  identify tmp.png
tmp.png PNG 1012x900 1012x900+0+0 DirectClass 8-bit 475.119kb

答案2

使用file是识别文件类型的可靠方法。它不依赖于文件扩展名,而是依赖于“幻数”;文件内容的开头。

为了使您的流程更加稳健,您可以libmagic直接使用。这样,如果由于某种原因 的file输出格式发生变化,它不会影响您。但是,这确实意味着您需要使用可以调用 C 库中的函数的语言来编写脚本。

答案3

您已经获得了正确的命令,因为它所做的只是通过libmagic.其唯一目的是认识到文件类型图案由各自给出的文件格式。所以你不会找到更好的东西。您甚至可以添加自己的文件扩展名,但这些扩展名无法被正确识别。 (针对 magick,而不是命令文件)

相关内容