C++ - 检测文件是PNG还是JPEG

Yip*_*Yay 6 c++ png jpeg image

有没有快速的方法来确定某个任意图像文件是png文件还是jpeg文件,还是没有?

我很确定有一些方法,这些文件可能有某种自己的签名,应该有一些方法来区分它们.

如果可能,您是否还可以在libpng/ libjpeg/中提供相应例程的名称boost::gil::io.

Tim*_*tes 21

查看文件开头的幻数.从维基百科页面:

JPEG图像文件以FF D8开头,以FF D9结束.JPEG/JFIF文件包含"JFIF"(4A 46 49 46)的ASCII代码,作为空终止字符串.JPEG/Exif文件包含"Exif"(45 78 69 66)的ASCII代码,也作为空终止字符串,后跟有关该文件的更多元数据.

PNG图像文件以8字节签名开头,该签名将文件标识为PNG文件,并允许检测常见的文件传输问题:\ 211 P NG\r \n\032 \n


Fre*_*Foo 3

除了 Tim Yates 建议“手动”读取幻数之外,Boost GIL 文档还指出:

  • png_read_imagestd::ios_base::failure如果文件不是有效的 PNG 文件,则会抛出异常。
  • jpeg_read_imagestd::ios_base::failure如果文件不是有效的 JPEG 文件,则会抛出异常。

对于其他 Boost GIL 例程也是如此。如果您只需要类型,您可能想尝试仅读取尺寸,而不是加载整个文件。