2016-02-28 146 views
-1

我試圖執行隱寫術具有以下步驟: 1.轉換後的圖像,以緩衝的圖像 2.轉換緩衝的圖像,以字節陣列 3.所做的修改在字節數組 4.轉換字節數組回緩衝的圖像 5.保存爲jpg文件轉換字節數組圖像並返回到字節數組,值改變

當我再次讀取所保存的文件中的問題出現了,它轉換成字節數組,發現字節陣列不同於我在步驟3之後獲得了什麼(雖然沒有太大差別,因爲6轉換爲7,9到8等等)

我真的不知道爲什麼會發生這種情況。

+1

可能重複[我正在閱讀一張圖片並更改它。但更改不會保存](http://stackoverflow.com/questions/25562479/i-am-reading-an-image-and-changing-it-but-the-changes-are-not-being-saved ) – Reti43

回答

0

JPG是一個有損圖像格式,所以你不能指望它保存後的數據完全保存。它特別不適合隱寫術,因爲它會破壞這種使用所需的小細節,即使在使用最高質量的設置時也是如此。

解決方案是使用無損格式,如PNG。

0

BufferedImage可能已經是一個字節數組。如果在創建BufferedImage時使用編碼TYPE_BYTE_GRAY,3BYTE_BGR或4BYTE_ABGR,則BufferedImage已經是一個字節數組。要訪問字節數組,請執行以下操作:byte[] buffer = ((DataBufferByte)my image.getRaster().getDataBuffer()).getData() ;

而當您將圖像寫入JPEG時,會壓縮並丟失圖像。因此,您保存的信息會被更改,無法像以前那樣檢索。你應該使用PNG/TIFF/BMP,PNG是最常見的。

1
  1. 如果保存爲JPEG,RGB數據將轉換爲YCbCr。這兩個顏色空間具有不同的色域,因此值會被鉗制。

  2. JPEG數據可能被二次抽樣,導致數據被改變。您可以通過不進行二次採樣來避免這些更改。

  3. 的JPEG DCT可能引入小的誤差(限於+/- 1,如果正確地實施)

  4. 量化將使相當大的變化的數據。您可以通過在量化表中使用全1來避免此步驟的更改。

不管你做什麼,#1和#3可以引入在JPEG壓縮過程中的變化。