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
- 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|
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...總之還是以頭部判斷爲主
- 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|
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
- 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..........|
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
- 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...(.|
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...(.|
這樣判斷靠譜一點..