圖片類型判斷

http get到的圖片數據 jpg/gif/bmp/png,可以通過一些方法來判斷圖片類型


首先是可以通過Content-Type字段來判斷,image/gif,image/png等。標示的很詳細。

但是這裏的內容是web server填進去的,不能保證其準確性。而且驗證一下可以發現,即使標示錯了,很多瀏覽器還是能正確識別data中的圖片,對圖片瀏覽沒什麼影響。

這也意味着如果你遇到一個不靠譜的網站,比如apache或者iis沒配好,這個Content-Type就不可信


比較靠譜的方法是讀取data內容,根據各種圖片標準來判斷圖片類型。一般可以區別圖片類型的標記都在圖片數據的頭部。所以判斷起來並不麻煩:

png: 前幾個字段會出現0x89 0x50 0x4e 0x47 0x0d 0x0a 0x1a 0x0a。顯示出來是什麼什麼PNG

  1. ryanhe@Tencent:~> hexdump -C main.png | head -n 1
  2. 00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR|
ryanhe@Tencent:~> hexdump -C main.png | head -n 1     
00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|

jpg: 頭部是0xFF 0xD8。有的文章說jpg文件尾部一定是0xFF 0xD9,結果被騙了...程序跑的時候發現尾部不一定可信,掛掉很多jpg圖...查看wiki文檔,Magic number是ffd8...總之還是以頭部判斷爲主
  1. ryanhe@Tencent:~> hexdump -C bg.jpg | head -n 1
  2. 00000000 ff d8 ff e0 00 10 4a 46 49 46 00 01 02 00 00 64 |......JFIF.....d|
ryanhe@Tencent:~> hexdump -C bg.jpg | head -n 1 
00000000  ff d8 ff e0 00 10 4a 46  49 46 00 01 02 00 00 64  |......JFIF.....d|

gif: 頭部是GIF89a,或者GIF87a
  1. ryanhe@Tencent:~> hexdump -C main.gif | head -n 1
  2. 00000000 47 49 46 38 39 61 00 04 00 03 f7 00 00 00 00 00 |GIF89a..........|
ryanhe@Tencent:~> hexdump -C main.gif | head -n 1    
00000000  47 49 46 38 39 61 00 04  00 03 f7 00 00 00 00 00  |GIF89a..........|

bmg: 頭部是0x42 0x4D
  1. ryanhe@Tencent:~/board_develop/front/public> hexdump -C main.bmp | head -n 1
  2. 00000000 42 4d 36 00 24 00 00 00 00 00 36 00 00 00 28 00 |BM6.$.....6...(.|
ryanhe@Tencent:~/board_develop/front/public> hexdump -C main.bmp | head -n 1      
00000000  42 4d 36 00 24 00 00 00  00 00 36 00 00 00 28 00  |BM6.$.....6...(.|

這樣判斷靠譜一點..

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章