java - 使用隐写术将图像隐藏在图像中
问题描述
我正在尝试一个程序来隐藏图像内部的图像,方法是用我在这里找到的秘密图像的 MSB 替换目标图像的 RGB 分量的 LSB https://towardsdatascience.com/steganography-hiding-an-image-inside -another-77ca66b2acb1 我正在尝试在 Java 中执行此操作。隐藏的图像似乎很好地隐藏在目标图像内,但检索到的图像似乎弄乱了像素。
隐藏图片的代码
for(int y=0 ; y<orHeight ; y++)
{
for(int x=0 ; x<orWidth ; x++)
{
//RData[],GData[],BData[] are storing the red, green and blue component respectively for ecach pixel of target image which is then being converted to 8 bit binary string.
RHString[n] = Integer.toBinaryString(RData[n]);
RData[n]= Integer.parseInt(RHString[n]);
RHString[n] = String.format("%08d",RData[n]);
GHString[n] = Integer.toBinaryString(GData[n]);
GData[n]= Integer.parseInt(GHString[n]);
GHString[n] = String.format("%08d",GData[n]);
BHString[n] = Integer.toBinaryString(BData[n]);
BData[n]= Integer.parseInt(BHString[n]);
BHString[n] = String.format("%08d",BData[n]);
//oRData[],oGData[],oBData[] are storing the red, green and blue component respectively for ecach pixel of image to be hidden.
ROString[n] = Integer.toBinaryString(oRData[n]);
oRData[n]= Integer.parseInt(ROString[n]);
ROString[n] = String.format("%08d",oRData[n]);
GOString[n] = Integer.toBinaryString(oGData[n]);
oGData[n]= Integer.parseInt(GOString[n]);
GOString[n] = String.format("%08d",oGData[n]);
BOString[n] = Integer.toBinaryString(oBData[n]);
oBData[n]= Integer.parseInt(BOString[n]);
BOString[n] = String.format("%08d",oBData[n]);
RHString[n] = RHString[n].substring(0,4)+ROString[n].substring(0,4);
GHString[n] = GHString[n].substring(0,4)+GOString[n].substring(0,4);
BHString[n] = BHString[n].substring(0,4)+BOString[n].substring(0,4);
//converting binary string to decimal integer using Integer.parseInt()
RData[n]= Integer.parseInt(RHString[n],2);
GData[n]= Integer.parseInt(GHString[n],2);
BData[n]= Integer.parseInt(BHString[n],2);
n++;
}
}
n=0;
for(int y=0 ; y<orHeight ; y++)
{
for(int x=0 ; x<orWidth ; x++) {
Color newC = new Color(RData[n], GData[n],BData[n]);
orImage.setRGB(x,y,newC.getRGB());
Color c = new Color(orImage.getRGB(x,y), true);// Color class will return the colour of that pixel specified by x,y coordinates
n++;
}
}
检索图像的代码(它是一个单独的代码,将输入作为在前面代码中创建的图像)
int n = 0;
for(int y=0 ; y<hiHeight ; y++)
{
for(int x=0 ; x<hiWidth ; x++)
{
RHString[n] = Integer.toBinaryString(RData[n]);
RData[n]= Integer.parseInt(RHString[n]);
RHString[n] = String.format("%08d",RData[n]);
GHString[n] = Integer.toBinaryString(GData[n]);
GData[n]= Integer.parseInt(GHString[n]);
GHString[n] = String.format("%08d",GData[n]);
BHString[n] = Integer.toBinaryString(BData[n]);
BData[n]= Integer.parseInt(BHString[n]);
BHString[n] = String.format("%08d",BData[n]);
RHString[n] = RHString[n].substring(4,8)+"0000";
GHString[n] = GHString[n].substring(4,8)+"0000";
BHString[n] = BHString[n].substring(4,8)+"0000";
//converting binary string to decimal integer using Integer.parseInt()
RData[n]= Integer.parseInt(RHString[n],2);
GData[n]= Integer.parseInt(GHString[n],2);
BData[n]= Integer.parseInt(BHString[n],2);
n++
}
}
n=0;
for(int y=0 ; y<hiHeight ; y++)
{
for(int x=0 ; x<hiWidth ; x++) {
Color newC = new Color(RData[n], GData[n],BData[n]);
hidImage.setRGB(x,y,newC.getRGB());
n++;
}
}
解决方案
推荐阅读
- python - Pycharm Python 控制台回归输出未对齐
- javascript - 使用 Javascript 按钮增加数字
- c++ - 将 ASCII 艺术转换为 OpenCV Mat
- python - TypeError:字符串索引必须是整数 - PyTorch
- css - 使用 slickR 调整雪佛龙和幻灯片之间的空间
- kubernetes - 普罗米修斯查询语言中 somestring1_somestring2:metric_name:some_operation 是什么意思
- powerapps - 将图像属性从电源应用程序传递到电源自动化流程
- java - Android Studio 未启动
- python - 在同一张图上绘制多个基尼系数
- sql - SQL 连接混淆