获取图像类型属性​​[重复]

Posted

技术标签:

【中文标题】获取图像类型属性​​[重复]【英文标题】:Get Image Type Attribute [duplicate] 【发布时间】:2019-06-22 17:21:55 【问题描述】:

给定图像文件的名称和位置作为字符串,我想明确确定图像类型是什么,例如 PNG、JPG、BMP 等。

【问题讨论】:

文件扩展名会最终决定文件类型吗?如果图像是 PNG 并且用户将文件重命名为 .jpg 会怎样? 虽然您可以通过扩展或其他方法(例如查看幻数/标题)来做到这一点,但我认为确定文件类型并非 100% 可能。 Linux 上的file 之类的工具试图做到这一点,但这通常只是一种启发式的猜测。只有当您确定这些是以有效格式提供给您的唯一类型时才有可能,否则您所知道的文件可能只是随机二进制数据,恰好在其标题结构中看起来像图像。跨度> 我们有处理图像的应用程序,客户确实不时尝试使用错误标记的图像(带有 JPG 文件名的 PNG 图像等),因此最好使用一个库来检查文件中的标头数据,而不仅仅是查看扩展名。 为什么你不能提取最后一个点后面的字母,并匹配它是否是 PNG、JPG 或 BMP 等等。如果扩展名由于某种原因不存在,你可以看看如果文件有效,则检查文件签名并找出类型。见 [en.wikipedia.org/wiki/List_of_file_signatures]. @TheShield 如果用户将png 文件的名称附加到.jpg,则其扩展名仍为png。如果您谈论的是用户获取例如 html 文件并将扩展名更改为例如 .png 的情况,则该文件不可读,但 它现在png文件。你想通过文件内容来推断扩展名吗?那么,如果有人使用c 代码创建txt 怎么办?应该是txt 还是c 文件? 【参考方案1】:

我决定使用 ImageMagick 的 identify -format "%m" filename 命令解决,因为它可以处理用户可以将文件的扩展名更改为另一个图像但内容保持不变的情况。

使用名为 test.png 的图像运行示例,其内容为 PNG 格式:

 identify -format "%m" test.png  
 PNG 
 mv test.png test.jpg 
 identify -format "%m" test.jpg
 PNG 

这是我正在寻找的结果。

【讨论】:

以上是关于获取图像类型属性​​[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Halcon一日一练:获取图像属性

使用 JavaScript/jQuery 从输入类型“文件”中获取二进制图像数据,以便在 WebMatrix 中使用 AJAX 进行图片预览 [重复]

如何获取图像作为 SVG 填充的背景

切换导航栏背景图像/颜色[重复]

图像的基础操作

OpenCV常用基本处理函数图像基本操作