我試圖改變圖像像素的LSB值,使得它與字符串「abc」匹配但添加1或0與奇值的像素被返回0 不一致值值這裏是代碼:改變LSB的圖像RGB值給予
public static void main(String[] args) {
BufferedImage img = null;
try {
img = ImageIO.read(new File("a.jpg"));
} catch (IOException ex) {
}
int pixel[] = img.getRGB(0, 0, img.getWidth(), img.getHeight(), null, 0, img.getWidth());
String s = "abc";
byte[] b = s.getBytes();
String f = "";
for (int i = 0; i < b.length; i++) {
f += Integer.toBinaryString(b[i]);
}
f.trim();
int[] newpixel = new int[pixel.length];
for (int i = 0; i < pixel.length; i++) {
if (i < f.length()) {
if (pixel[i] % 2 == 0) {
if (f.charAt(i) == '0') {
newpixel[i] = pixel[i];
}
if (f.charAt(i) == '1') {
newpixel[i] = pixel[i] + 1;
}
}
if (pixel[i] % 2 == 1) {
if (f.charAt(i) == '0') {
newpixel[i] = pixel[i] - 1;
}
if (f.charAt(i) == '1') {
newpixel[i] = pixel[i];
}
}
} else {
newpixel[i] = pixel[i];
}
}
o:
for (int i = 0; i < img.getWidth() * img.getHeight(); i++) {
if (i < f.length()) {
System.out.print(" " + f.charAt(i) + ":(" + pixel[i] + "," + newpixel[i] + ")");
} else {
break o;
}
}
}
並且輸出是:
1:( - 11235948,-11235947)1:( - 11893363,0)0:( - 11893617,0) 0:( - 10577497,0)0:( - 11695976,-11695976)0:( - 12090996,-12090996)1:( - 11170168,-11170167)1:( - 10775924,-10775923)1:( - 972 0:( - 9658965,0)0:( - 9856341,0)0:( - 11236466,-11236466)1:( - 11564174,-11564173)0:( - 11431819,0)1: 10380136,-10380135)1:( - 10973290,-10973289)0:( - 12093056,-12093056)0:( - 10842985,0)0:( - 10118999,0)1:( - 11368034,-11368033)1: (-11630686,-11630685)
:但我認爲你的代碼會使代碼的提取有點困難。你可以建議我如何提取字符串。 – 2014-10-29 16:20:11
我已經用提取snipet更新了答案。 – Reti43 2014-10-29 17:37:49
:在將newpixel寫入jpg文件時,應該是什麼顏色模型?我嘗試了幾乎所有類型的顏色模型,但提取並不成功,雖然我的代碼在使用像素數組時工作正常。 – 2014-11-06 15:32:12