检测图像类型的方法更可靠:内容类型还是MIME嗅探?

时间:2011-12-03 11:52:06

标签: windows image winapi file-format

我想在Windows应用程序中检测图像文件格式。图像可以从网上下载(通过HTTP),也可以从本地文件加载。

哪种方法更可靠,可以检测从Web下载的文件的图像文件格式?

  • 文件扩展名是最明显的方式,但通常不正确或缺失
  • HTTP标头内容类型是一个很好的候选者(我可以检查图像类型而无需通过HTTP HEAD命令下载),但有时候设置不正确
  • MIME-sniffing(通过Windows API FindMimeFromData命令或通过手动检查已知签名的文件内容)是我所知道的最后一种方法,但我从未使用它,我不确定它是否可靠

那么,我应该使用什么?

2 个答案:

答案 0 :(得分:3)

查看数据本身更可靠,但您需要为要检测和处理的每种特定类型添加检查。请注意,如果您使用的是内容类型,则需要确定此信息 错误配置的服务器和数据猜测经常会得到错误的Windows小工具,Java jar等内容类型,这些内容类型都基于zip格式,您需要另外一种方法来区分类型(回退到扩展等)。 / p>

答案 1 :(得分:1)

大多数图像文件格式包含特定字节偏移量的标识符。例如,JPG图像的偏移量为6的字符串为JFIF,偏移量为1的PNG文件为PNG,偏移量为0的GIF文件为GIF89GIF87, BMP文件在偏移0处具有BM,依此类推。