Image 使用光栅在图像的四个部分放置不可见信息

Image 使用光栅在图像的四个部分放置不可见信息,image,raster,steganography,lsb,Image,Raster,Steganography,Lsb,我从这个网站上找到了一个教程(它也包括代码),我想把这四条信息放到我在下面的链接中画的图片的四个不同部分,但我不知道如何确切地把信息放到第四部分。这是我在下面使用光栅修改的代码的一部分 private byte[] get_byte_data(BufferedImage image) { WritableRaster raster = image.getRaster(); int imageHeight=image.getHeight()/2; System.out.p

我从这个网站上找到了一个教程(它也包括代码),我想把这四条信息放到我在下面的链接中画的图片的四个不同部分,但我不知道如何确切地把信息放到第四部分。这是我在下面使用光栅修改的代码的一部分

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

如何才能将消息准确地放入我想要的部分?

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

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

我将从您先前的一个相关问题中提供答案

在这里,我向您展示了如何在图像的每一个R、G、B和一个组件中隐藏不同的消息,方便地说是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个文本消息框配合使用非常方便

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