Linux/Unix下系統推斷文件類型并不根據文件名稱,也即不會根據文件后綴來推斷文件的類型。從網上下載了一個圖片,沒有后綴,希望可以正確推斷出格式。以便于共享到其它平臺,該怎么辦呢?
不同文件類型的文件頭部信息不同,比較流行的圖片的格式有jpg,png, gif等,以下列出jpg。png,gif文件頭(16進制):
JPEG (jpg)。文件頭:FFD8FF
PNG (png),文件頭:89504E47
GIF (gif),文件頭:47494638
有了文件頭,推斷文件就非常easy了.讀取圖片文件頭部信息,之后進行比較就可以。
有非常多已有的編輯器能夠直接讀取文件的二進制信息。以下使用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 |
很多其它文章請前往小胖軒.