2014-01-15 53 views
0

在图像的四个部分放入不可见的消息,我发现这个网站的教程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(); 
} 

如何将消息放入我想要的部分?

回答

1

我会提供my answer从你以前的相关问题。

那里我向你展示了如何在图像的每个R,G,B和A分量中隐藏不同的消息,这个分量方便地为4.要使用它,在R中嵌入第一条消息并保存输出。然后加载该输出并将下一条消息存储在G中并重新保存输出。等等...由于每条消息都使用每种颜色组件,因此每条消息的最大尺寸可以是(p - 32)/ 8。

优点:它有效地实现了你想要的,代码已经在你身边,最大可能的容量。

缺点:由于加载 - >嵌入 - >保存x4方面,使用起来非常麻烦。现在


,如果你真的固执,你想在4个部分实际上分裂的形象,必须应用在代码中的以下变化(从以前的问题,但与原来的开始是在提供该网站):

  • 更改GUI,使其具有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个文本消息框很方便。

缺点:与上面的其他建议相比,它将花费相同的最大容量编码修改。

1

隐写和Java图像操作的概念应该分开来理解。 在隐写术中,我们将隐藏消息的字节嵌入到载体消息的字节中。 在载体的一个字节数组中,我们无法确定这些图像部分中的每一个从哪里开始。

所以你要做的是这个。首先将载体图像分成四个独立的图像,然后根据需要将字节附加到隐藏的数据字节中。 然后创建新的图像对象,并在正确的位置绘制这四个分离的图像。