2014-06-20 61 views
-2

我有一個很有趣的問題較大,我將JPG圖像字節數組在Java中,像這樣:Java字節數組比JPG圖像

> public byte[] toBytes(String file) throws IOException { 
     File img = new File(file); 
     BufferedImage image = ImageIO.read(img); 
     WritableRaster r = image.getRaster(); 
     DataBufferByte data = (DataBufferByte) r.getDataBuffer(); 

     return data.getData(); 
    } 

這顯然只是一個系統的一部分,但請相信我的單詞^ _ ^: 這個方法返回一個字節數組,但是 - 當我給它一個大小爲20,000字節的.jpg文件時(Linux - 右鍵單擊​​圖像 - >屬性 - >大小顯示爲大約20 000字節),獲得的字節數組長度超過345 000,即345 000字節(全部初始化爲某些值,而不僅僅是0-s)。你們知道爲什麼會發生這種情況嗎?

+0

如果你在linux上,並用右鍵單擊檢查圖像的大小,然後抱歉的朋友,但我不會_相信你的word_。 –

+0

Jpeg壓縮...所以..... –

+0

在Linux上使用圖形界面有什麼問題??????????你有沒有聽說過 - Ubuntu?它是操作系統,顯然 - 它具有圖形(實際上相當不錯)接口,就像許多其他Linux發行版一樣。 –

回答

5

Jpeg是一種高度壓縮的圖形格式。它使用各種技巧以儘可能少的字節對圖像進行編碼,而不會使其看起來與原始圖像截然不同(至少就人眼而言)。

但是,當您用image.getRaster()柵格化圖像時,圖像被解碼。所有的壓縮技巧都被恢復,以創建一個每像素3個字節的未壓縮圖像(一個用於紅色,綠色和藍色)。

當您因爲某些原因需要壓縮的JPEG數據時,請直接使用FileInputStream訪問File對象。

+0

謝謝。這就是我的想法 - 但不確定。你知道任何有關圖形格式的好消息嗎?最好在線?具體來說,我的意思是像標題,如何閱讀它們等等。 –

+0

順便說一句 - 如果1個像素變成3個字節,那麼alpha通道呢? –

+1

@PawelHuszcza JPEG沒有alpha通道。 – Philipp