Linux/Unix下系統判斷文件類型並不依據文件名,也即不會根據文件後綴來判斷文件的類型。從網上下載了一個圖片,沒有後綴,希望能夠正確判斷出格式,以便於共享到其他平臺,該怎麼辦呢?
不同文件類型的文件頭部信息不同,比較流行的圖片的格式有jpg,png, gif等,下面列出jpg,png,gif文件頭(16進制):
JPEG (jpg),文件頭:FFD8FF
PNG (png),文件頭:89504E47
GIF (gif),文件頭:47494638
有了文件頭,判斷文件就很容易了.讀取圖片文件頭部信息,之後進行比較即可。有很多已有的編輯器可以直接讀取文件的二進制信息,下面使用xxd進行二進制信息讀取並判斷:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/bin/bash
#judge image file type #判斷是否只有一個參數 if [ $# != 1 ] then echo "parameter error" else ## 讀取前3個字節與前4個字節對應的16進制 len3=`xxd -p -l 3 $1` len4=`xxd -p -l 4 $1` if [ $len3 == "ffd8ff" ] then echo "The type is jpg" elif [ $len4 == "89504e47" ] then echo "The type is png" elif [ $len4 == "47494638" ] then echo "The type is gif" else echo "The type is others" fi fi |
更多文章請前往小胖軒.