Jpeg的檔案資訊
JPEG檔案的格式是分為一個一個的段來儲存的(但並不是全部都是段),段的多少和長度並不是一定的。只要包含了足夠的資訊,該JPEG檔案就能夠被開啟,呈現給人們。JPEG檔案的每個段都一定包含兩部分一個是段的標識,它由兩個位元組構成:第一個位元組是十六進位制0xFF,第二個位元組對於不同的段,這個值是不同的。緊接著的兩個位元組存放的是這個段的長度(除了前面的兩個位元組0xFF和0xXX,X表示不確定。他們是不算到段的長度中的)。注意:這個長度的表示方法是按照高位在前,低位在後的。與Intel的表示方法不同。比方說一個段的長度是0x12AB,那麼它會按照0x12,0xAB的順序儲存。但是如果按照Intel的方式:高位在後,低位在前的方式會儲存成0xAB,0x12,而這樣的儲存方法對於JPEG是不對的。這樣的話如果一個程式不認識JPEG檔案某個段,它就可以讀取後兩個位元組,得到這個段的長度,並跳過忽略它。
0xFFXX又可稱為標記碼,絕大多數的JPEG檔案只包含以下幾種:
SOI 0xD8 (影象開始,start of image,可作為JPEG格式的判斷,JFIF還需要APP0的配合);
APP0:0xE0 (JFIF應用資料塊,APP0是JPEG保留給Application所使用的標記碼,而JFIF將檔案的相關資訊定義在此標記中);
Appn:0xE1-0xEF,其它的應用資料塊(n ,1-15);
DQT:0xDB ,量化表
SOF0:0xC0 ,幀開始
DHT:0xC4,Huffman表
SOS:0xDA 掃描線開始,start of scan
EOI:0xD9,影象結束,end of image
上面截圖是jpg影象的檔案頭資訊,使用ulTraEdit讀取,下面根據jpeg的標記和上面截圖一起分析jpeg的檔案頭:
1)影象的開始SOI(start of image)標記
就是截圖中的開始兩個位元組FF D8
2)APP0標記(Marker)
對應截圖中的FF E0
2.1)APP0 長度,2個位元組,對應截圖中的 00 10,及長度為16個位元組,該長度不包括FF E0,但包括00 10這兩個位元組;
2.2)識別符號(identifier)
5個位元組,JFIF識別碼,對應截圖中的0x4A,0x46,0x49,0x46,0x00
2.3 版本號
接下來的兩個位元組表示版本號,可以為0101,或0x0102;在上圖中為0x0101,為JFIF版本號
2.4 X和Y的密度單位
1個位元組,units=0,無單位;units=1;點數,英寸;units=2;點數/釐米;
上圖中為0,表示無單位;
2.5 X方向的畫素密度
2個位元組表示水平解析度,上圖中為0x012c,轉化為10進位制,為300
2.6 Y方向的畫素密度
2個位元組,表示垂直解析度;上圖中為0x012c,轉化為10進位制,為300
2.7)縮放圖水平畫素的數目;
1個位元組,對應圖中0x00
2.8)縮放圖垂直畫素數目;
1個位元組,對應圖中0x00
2.9)縮放圖RGB點陣圖
3個位元組,表示縮放圖RGB點陣圖,上圖中沒有該欄位
3)一個或多個量化表DQT(define quantization table)
標記為0xFF DB
3.1)量化表長度
2個位元組,DQT標記碼長度,不包括前2個位元組0xFF和0xDB,從上圖可以看出該量化表的長度為0x0043 ,即67個位元組;
3.2)量化表的數目;
(Pq,Tq):1位元組,它的高4位Pq為量化表的資料精度,Pq=0時,表示8位;當Pq=1時,Qt的值為16bit;Tq表示量化表的編號,為0-3。在基本系統中,Pq=0,Tq=0-1,即最多有兩個量化表;對應上圖;量化表的資料對應位元組為0x00,即是8bit的第0個量化表
3.3)量化表(quantization table)
Q0-Q63,當Pq=0時,每一個Qn用一個位元組表示;當Pq=1;用兩個位元組表示,在上圖中,用一個位元組表示;
從上圖中提取量化表(亮度量化表)如下:
10 |
0B |
0C |
0E |
0C |
0A |
10 |
0E |
0D |
0E |
12 |
11 |
10 |
13 |
18 |
28 |
1A |
18 |
16 |
16 |
18 |
31 |
23 |
25 |
1D |
28 |
3A |
33 |
3D |
3C |
39 |
33 |
38 |
37 |
40 |
48 |
5C |
4E |
40 |
44 |
57 |
45 |
37 |
38 |
50 |
6D |
51 |
57 |
5F |
62 |
67 |
68 |
67 |
3E |
4D |
71 |
79 |
70 |
64 |
78 |
5C |
65 |
67 |
63 |
接著又是0xFFDB,即接下來的段又是一個量化表;量化表的長度還是67個位元組,量化表的數目為0x01,即是第一個量化表;下面直接給出第2個量化表,即色度量化表;
11 |
12 |
12 |
18 |
15 |
18 |
2F |
1A |
1A |
2F |
63 |
42 |
38 |
42 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
63 |
4 幀影象開始SOF(start of Frame)
幀影象開始標記為:0xFF 0xC0
4.1)幀開始長度(start of frame length)
兩個位元組,上圖中為0x0011,即17個位元組;包括它本身;
4.2)精度,每個顏色分量每個畫素的位數,一個位元組,基本系統中,為0x08。
4.3)影象的高度(image height)
2個位元組,對應圖中為0x00B1 對應10進製為177,即對應的高為177
4.4)影象的寬度
2個位元組,對應圖中為0x01E6 ;對應10進製為486,即影象的寬為486,得到影象的分別率為486*177;
4.5)顏色分量數
1位元組,1表示灰度圖,3表示真彩圖;上圖中該欄位=3,為真彩圖;
4.6)對每個顏色分量(for each component)
ID號,一個位元組;
垂直方向的樣本因子;
水平方向的樣本因子;
量化表號(quantization table#)
01 22 00 02 11 01 03 11 01
分別表示3個分量;
01 22 00 表示第1個分量,ID號為01 ,垂直方向的樣本因子為2,水平也為2 量化表=0,即採用亮度量化表;第2,第3個分量採用色度量化表,從這個顏色分量可以看出為YUV411的格式;
5)一個或多個huffman表
0xFF C4
5.1)huffman表的長度;
兩個位元組,不包括前面的兩個位元組,在截圖中長度為0x001B;
5.2)huffman型別,AC或DC;
一個位元組長度,(Tc,Th),Tc為高4bit,Th為低4bit。在基本系統中,Tc為0或1,為0時,指DC所用的huffman表,為1時,指AC所用的Huffman表。Th表示Huffman表的編號,在基本系統中,其值為0或1。在截圖中該欄位為0x00;即該huffman表DC的Huffman表。該huffman表的有效長度為27-3=24個位元組;
這24個位元組分為Ln (n=1-16);Ln表示每個nbit的Huffman碼字的個數;
Vt表示每個Huffman碼字所對應的值,對於DC來說該值為(Size),對於AC來說為(RunLength,Size)。t=L1+L2+…+L16,即t=01+02+03+01+01=08,所以總長度為24。
1) 掃描開始SOS(start of Scan)
起始為0xFFDA兩個位元組,然後接著就是長度,長度2個位元組,截圖中的長度為0x000c;即為12個位元組;
① 掃描開始長度(start of scan length) //對應0x000C
② 顏色分量數(number of color components) //對應0x03
③ 每個顏色分量
o ID
o 交流係數表號(AC table #)
o 直流係數表號(DC table #)
01 00 02 11 03 11 表示3個分量,第一個分量的交直流引數對應項為0x00,即表示DC編碼表編號為0,AC編碼編碼表的編號為0。
相關文章
- JPEG格式研究——(2)JPEG檔案格式
- JPEG檔案編/解碼詳解 .
- 列出檔案的inode資訊
- 檔案屬性資訊
- jpeg,png,bmp轉換成icon,windows本地匯出icon檔案Windows
- linux組資訊檔案Linux
- Oracle檔案頭資訊(zt)Oracle
- 檔案管理系統助力檔案資訊化建設
- 關於控制檔案與資料檔案頭資訊的說明(zt)
- 密碼檔案資訊總結密碼
- 資訊、檔案管理之工具論
- Linux:査看檔案的詳細資訊Linux
- 使用PHP獲取影像檔案的EXIF資訊PHP
- 抽取exp/expdp匯出檔案頭的資訊
- 檢視linux中檔案的inode資訊Linux
- Android中音樂檔案的資訊詳解Android
- 將bmp檔案轉換成JPEG(待修改,目前可轉換但圖片倒轉)
- Ropper-顯示有關不同檔案格式的二進位制檔案的資訊
- JPEG Jackal pro for Mac(jpeg圖片壓縮神器)Mac
- JPEG轉RGB Bmp(IJG庫 jpeg.lib)
- 清除Oracle控制檔案中的歸檔資訊v$archived_logOracleHive
- 在檔案中夾雜其他資訊
- Concealer for Mac(檔案資訊加密工具)Mac加密
- idea檔案頭資訊設定Idea
- 檢視BAM檔案頭部資訊
- python讀配置檔案配置資訊Python
- 基於檔案的學生資訊管理系統
- SpringBoot專案中獲取配置檔案的配置資訊Spring Boot
- nodejs獲取檔案資訊,判斷是檔案或目錄NodeJS
- JPEG 壓縮原理
- JPEG影象的解壓縮操作
- 重建控制檔案時,與資料檔案相關的Checkpoint資訊來自何處
- SILKYPIX JPEG Photography 11E Mac(JPEG圖片處理工具)Mac
- 檢測根目錄帶bom頭資訊的檔案
- 刪除控制檔案中的磁帶備份資訊
- 獲取APK檔案的簽名資訊,反射實現APK反射
- 關於檔案頭保留塊資訊的儲存探索
- 細數檔案共享的發展歷程–資訊圖