1. 程式人生 > >圖片標頭檔案資訊解析

圖片標頭檔案資訊解析

  今天發現獲取圖片的寬高,並不需要把圖片完全讀完之後再來獲取,而只需要讀取檔案標頭檔案,幾十個位元組便可以讀出檔案的寬高。

  圖片的檔案頭部儲存有該圖片相關資訊,可以從中讀取相應欄位,得到尺寸、大小、格式等資訊。由於無需載入整張圖片,故而速度較快。當圖片較大時,優勢更加明顯。

  現在把今天發現的東西總結一下,所有資料都是用的QQ截圖。特徵碼的位置可能和實際不同,目前發現jpg的寬高特徵碼不確定。如果以後發現特徵碼規律會回來修改這篇部落格。

  所有資料都是QQ截圖出來的,並且做了多張比較,以下例子只是其中之一。

bmp(771*434):

   bmp

  可以看出width低位:0x12,高位:0x13。height低位:0x16,高位0x17。

PNG(906*440)

  png

  width低位:0x13,高位0x12。height低位:0x17,高位0x16。和bmp剛好相反

GIF(976*402)

  gif

  width低位:0x07,高位0x06。height低位:0x09,高位0x08。

JPG(800*525)

  jpg

   width低位:0xA5,高位0xA6。height低位:0xA3,高位0xA4。

  再次強調,以上均為QQ截圖的格式,以上特徵碼可能和實際圖片不一致,已知jpg格式的圖片特徵碼不一致,在使用特徵碼時,最好先檢查一下是否一致。

補充:以上4種圖片型別的特徵碼

1.BMP
-檔案頭標識 (2 bytes) 42 4D


2.PNG
- 檔案頭標識 (8 bytes) 89 50 4E 47 0D 0A 1A 0A
3.GIF
- 檔案頭標識 (6 bytes) 47 49 46 38 39(37) 61
4.JPEG/JPG
- 檔案頭標識 (2 bytes): FF, D8 (SOI) (JPEG 檔案標識)
- 檔案結束標識 (2 bytes): FF, D9 (EOI)