如何可靠地確定檔案是否為影像檔案?

如何可靠地確定檔案是否為影像檔案?

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

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,而非命令檔)

相關內容