0

我从这个网站找到了一个教程隐写术(它也包括代码),我想把这四个消息放入图像的四个不同部分,因为我在下面绘制了链接四方图像,但我不知道如何准确地放置留言给四节。这是我使用下面的光栅修改的代码的一部分

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();
}

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

4

2 回答 2

1

隐写术和 Java 图像处理的概念应该分开理解。在隐写术中,我们将隐藏消息的字节嵌入到载体消息的字节中。在载体的字节数组中,我们无法根据您的要求确定每个图像部分的开始位置。

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

于 2014-01-25T05:35:15.720 回答
1

我将从您之前的相关问题中提供我的答案。

在那里,我向您展示了如何在图像的每个 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 个文本消息框一起使用很方便。

缺点:与上面的其他建议相比,将修改编码为相同的最大容量需要付出努力。

于 2014-01-25T15:01:01.740 回答