我从这个网站找到了一个教程Steganography(它还包括代码),我想将四条信息放入图像的四个不同部分,因为我画了链接Four parties of image,但是我我不确定如何准确地将消息放到四节中。这是我使用下面的光栅
修改的代码的一部分private byte[] get_byte_data(BufferedImage image) {
WritableRaster raster = image.getRaster();
int imageHeight=image.getHeight()/2;
System.out.println("ImageHeight: "+imageHeight);
int imageWidth=image.getWidth()/2;
System.out.println("ImageWidth: "+imageWidth);
DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
return buffer.getData();
}
如何将消息放入我想要的确切部分?
答案 0 :(得分:1)
隐写术和Java图像处理的概念应该分开理解。 在隐写术中,我们将隐藏消息的字节嵌入到载波消息的字节中。 在载体的字节数组中,我们无法根据您的要求确定每个图像部分的开始位置。
所以你要做的就是这个。首先将载波图像分割为四个单独的图像,然后根据需要附加隐藏数据字节的字节。 然后创建新的图像对象,并在正确的位置绘制这四个分离的图像。
答案 1 :(得分:1)
我将根据您之前的相关问题提供my answer。
在那里,我向您展示了如何在图像的每个R,G,B和A组件中隐藏不同的消息,方便地为4.要使用它,将第一条消息嵌入R并保存输出。然后加载该输出并将下一条消息存储在G中并重新保存输出。等等......由于每条消息都使用了每个颜色组件,因此每条消息的最大大小可以为(p - 32)/ 8。
优点:它有效地实现了您的目标,代码已经存在,最大容量可能。
缺点:由于加载,使用起来非常麻烦 - >嵌入 - >保存x4方面。
现在,如果您真的坚持并且想要将图像分成4个部分,则必须在代码中应用以下更改(从上一个问题开始,但从网站上提供的原始文件开始):
embedMessage
方法中传递四分之一。四个象限应该有坐标(0:maxX / 2,0:maxY / 2),(0:maxX / 2,maxY / 2:maxY),(maxX / 2:maxX,0:maxY / 2)和(maxX) / 2:maxX,maxY / 2:maxY),其中maxX = yourimage.getWidth()
和maxY = yourimage.getHeight()
。您可以使用图片数据上的getSubimage
方法执行此操作。问题在于,对于每个象限,您仍然嵌入一个颜色组件,因此每条消息的有效性不能超过(p / 4 - 32)/ 8,这几乎是我建议的容量的4倍方法
通过嵌入每个象限的所有R,G,B和A组件,您可以实现上述最大容量。这也是我向你展示了如何在我的链接答案中做的事情。
所有这些都需要进行一些代码修改,但我已经为您提供了所有要进行的更改的概念和逻辑结构。
优点:使用4个短信框很方便。
缺点:与上述其他建议相比,需要花费相同的最大容量对修改进行编码。