2013-03-25 113 views
0

我開發了一個加密圖像的項目。該程序工作正常,但加密一個148 KB的PNG圖像後,它變成257 KB。當相同的文件解密回來,我得到舊的圖像回來,但圖像現在是219 KB。爲什麼尺寸幾乎翻倍?加密後圖像大小增加

我的代碼:Cannot read image in jar

+3

加密imaage純粹作爲二進制數據(字節)。讀取圖像然後用java編寫圖像可能不會產生最高的壓縮率,並且有損壓縮會降低質量。 – 2013-03-25 17:47:32

回答

0

這是不正確的加密/解密步驟,這是問題,而是你如何讀寫PNG。

您應該使用二進制流如FileInputStreamFileOutputStream來讀寫PNG。通過保持二進制文件,確保您不會更改數據。

圖像更改大小(148 KB - > 219 KB)的原因是您不保留原始文件的所有屬性。

作爲一個例子的輸出寬度,高度和類型是硬編碼與以下語句(而不是從原始圖像填充它):

BufferedImage writeImage = new BufferedImage(512, 512, BufferedImage.TYPE_BYTE_GRAY); 
+0

但我的圖像寬度和高度與原始圖像相同。規模仍在增加。爲什麼? – Prasad 2013-10-22 06:39:22

+0

可能是另一種顏色深度,可提供更多數據或添加一個alpha圖層。問題在於,png是不必要的解包和重新打包 - 顯然有幾個屬性沒有保留。話雖如此,加密輸入應該只是一個二進制流。加密不應該在乎被加密的文件是圖片,文本文件還是其他東西。 – 2013-10-22 09:02:22

+0

其實我用RC4加密一個圖像,就像算法一樣,也就是用鍵做'XOR'圖像。我什麼都不做(明確),這將導致加密圖像的大小增加。我真的想跟蹤這個。請幫幫我。 – Prasad 2013-10-22 10:52:08