2010-09-22 110 views
6

有沒有什麼快速的方法可以確定某些任意圖像文件是png文件還是jpeg文件或者它們都不是?C++ - 檢測文件是PNG還是JPEG

我敢肯定有一些方法,這些文件可能有某種自己的簽名,應該有一些方法來區分它們。

如果可能,您還可以提供相應例程的名稱:libpng/libjpeg/boost::gil::io

回答

2
從讀取幻數 「手動」 蒂姆·耶茨的建議,升壓GIL文件說

除了:

  • png_read_image拋出std::ios_base::failure如果該文件不是有效的PNG文件。
  • jpeg_read_image如果文件不是有效的JPEG文件,則會拋出std::ios_base::failure

與其他Boost GIL例程類似。如果您只需要該類型,則可能需要嘗試僅讀取dimensions,而不是加載整個文件。

+0

還有一個問題說,所謂jpeg_read_image不會引發異常。 – jiggunjer 2015-06-17 17:03:27

17

查看文件開頭的magic number。從維基百科頁面:

JPEG圖像文件開始FF D8與FF D9結束。 JPEG/JFIF文件 包含「JFIF」(4A 46 49 46)的ASCII碼作爲空終止字符串。 JPEG/Exif文件包含「Exif」(45 78 69 66)的ASCII代碼 ,也可以作爲 以空字符結尾的字符串,然後是 關於該文件的更多元數據。

PNG圖像文件開始與文件標識爲 PNG文件並允許 普通文件傳輸問題檢測一個8字節的簽名:\ 211 P NG \ r \ n \ 032 \ n

3

這個問題基本上是由上面的答覆回答的,但我想我會添加以下內容:如果您需要確定超出「JPEG,PNG,其他」的文件類型,總是有libmagic。這就是Unix實用程序文件的功能,這在許多現代操作系統上的確非常神奇。

相關問題