加密后图像大小增加
我开发了一个加密图像的项目。该程序工作正常,但加密一个148 KB的PNG图像后,它变成257 KB。当相同的文件解密回来,我得到旧的图像回来,但图像现在是219 KB。为什么尺寸几乎翻倍?加密后图像大小增加
这是不正确的加密/解密步骤,这是问题,而是你如何读写PNG。
您应该使用二进制流如FileInputStream
和FileOutputStream
来读写PNG。通过保持二进制文件,确保您不会更改数据。
图像更改大小(148 KB - > 219 KB)的原因是您不保留原始文件的所有属性。
作为一个例子的输出宽度,高度和类型是硬编码与以下语句(而不是从原始图像填充它):
BufferedImage writeImage = new BufferedImage(512, 512, BufferedImage.TYPE_BYTE_GRAY);
但我的图像宽度和高度与原始图像相同。规模仍在增加。为什么? – Prasad 2013-10-22 06:39:22
可能是另一种颜色深度,可提供更多数据或添加一个alpha图层。问题在于,png是不必要的解包和重新打包 - 显然有几个属性没有保留。话虽如此,加密输入应该只是一个二进制流。加密不应该在乎被加密的文件是图片,文本文件还是其他东西。 – 2013-10-22 09:02:22
其实我用RC4加密一个图像,就像算法一样,也就是用键做'XOR'图像。我什么都不做(明确),这将导致加密图像的大小增加。我真的想跟踪这个。请帮帮我。 – Prasad 2013-10-22 10:52:08
加密imaage纯粹作为二进制数据(字节)。读取图像然后用java编写图像可能不会产生最高的压缩率,并且有损压缩会降低质量。 – 2013-03-25 17:47:32