2016-05-13 35 views
0

從一個JFIF圖像收集信息工作的掃描開始的最後2個字節我創建了使用Java:什麼是一個JPEG/JFIF圖像

Image bmp = ImageIO.read(new File("Background1.png")) 
     .getScaledInstance(624, 416, Image.SCALE_SMOOTH); 

BufferedImage tmpBufferedImage = new BufferedImage(bmp.getWidth(null), bmp.getHeight(null), 
     BufferedImage.TYPE_USHORT_565_RGB); 
Graphics2D g = tmpBufferedImage.createGraphics(); 
g.drawImage(bmp, 0, 0, null); 
g.dispose(); 

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ImageIO.write(tmpBufferedImage, "jpg", baos); 

.... Written to file later. 

我已經創建了幾個圖片和標題是相同的除了剛好在數據之前。以下是一些標題示例。

FF D8 FF...FF DA 00 0C 03 01 00 02 11 03 11 00 3F 00 F3 EA 
FF D8 FF...FF DA 00 0C 03 01 00 02 11 03 11 00 3F 00 F7 FA 
FF D8 FF...FF DA 00 0C 03 01 00 02 11 03 11 00 3F 00 E2 E8 
FF D8 FF...FF DA 00 0C 03 01 00 02 11 03 11 00 3F 00 F9 FE 

緊隨其後的是壓縮數據並以FF D9結束。

根據我在JPEG/JFIF上閱讀的所有內容,FF DA之後的所有內容都是壓縮數據,但爲什麼00 0C 03 01 00 02 11 03 11 00 3F 00總是在每個圖像中?另外,如果有人知道,那最後兩個字節是什麼?我做了幾個單色圖像,它們都有一個重複的序列,在最後兩個字節之後開始,這讓我認爲它們必須是某種標題信息。

問題:這12個字節(0C ... 00)是什麼,特別是最後2個字節是什麼?

更新:所以這些字節被稱爲掃描開始,我已經找到了一些文件。 00 0C是一個長度(12),這是合理的,因爲它加起來就是有問題的字節。關於接下來的8個字節還有一些其他信息,但最後一些我仍然不確定。

最終:這是一個兔子洞,但我要留下的問題,以防有人追逐同一只兔子。最後的兩個字節是掃描數據的一部分,因爲00 0c顯然包含在12字節的計數中。另一位用戶在另一個問題上指出了這一點。

+0

你真的不是在詢問標題中的最後14個字節(如在標題中);你更關心數據的前14個字節。 –

+0

我更新了我的標題並添加了其他信息 –

回答

2

您需要查看SOS標記的佈局。

  • FFDA表示SOS標記。
  • 00OC是標記長度= 12
  • 3 =組件數量。 之後是分配給掃描的掃描ID,霍夫曼和量化表。

接下來是壓縮的掃描數據。

顯然,無論您使用的是哪種編碼器,都會在交錯掃描(而不是單獨掃描中的每個組件)中編碼彩色圖像。

FFD9是一個EOI標記,指示JPEG流的結束。

+0

@ user3344004我接受了這個答案,因爲它讓我回答了我的問題。我將打開另一個問題,我希望你的意見,因爲你似乎知道從我在這裏找到的其他答案判斷jpeg。我會在這裏鏈接問題。 –

+0

請參閱此問題http://stackoverflow.com/questions/37223310/sending-image-directly-to-epson-projector-trouble-decoding-jpeg-image –