Я знаю, что использование LSB означает, что вы можете хранить сообщения размером около 12% от размера носителя изображения. Я сделал java-программу, которая разбивает сообщение на n фрагментов и заполняет носитель изображения этими фрагментами до тех пор, пока все 12% не будут заняты. Я делаю это, чтобы при обрезке изображения сообщение не потерялось. Проблема в том, что полученное изображение искажено и отличается от исходного изображения. Я думал, что если я заполню только 12% изображения, точнее младший бит изображения, изображение не будет искажено.
int numHides = imLen/(totalLen*DATA_SIZE); // the number of messages I can store in the image
int offset = 0;
for(int h=0; h < numHides; h++) //hide all frags, numHides times
for(int i=0; i < NUM_FRAGS; i++) {//NUM_FRAGS ..the number of fragments
hideStegoFrag(imBytes, stegoFrags[i], offset);//the method that hides the fragment into the picture starting at the offset position
offset += stegoFrags[i].length*DATA_SIZE;
}
private static boolean hideStegoFrag(byte[] imBytes,byte[] stego,int off){
int offset=off;
for (int i = 0; i < stego.length; i++) { // loop through stego
int byteVal = stego[i];
for(int j=7; j >= 0; j--) { // loop through 8 bits of stego byte
int bitVal = (byteVal >>> j) & 1;
// change last bit of image byte to be the stego bit
imBytes[offset] = (byte)((imBytes[offset] & 0xFE) | bitVal);
offset++;
}
}
return true;
}
Код преобразования буферизованного изображения в биты
private static byte[] accessBytes(BufferedImage image)
{
WritableRaster raster = image.getRaster();
DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
return buffer.getData();
}
Код, создающий новое изображение с заданным именем и буферизованное изображение исходного изображения.
public static boolean writeImageToFile(String imFnm , BufferedImage im){
try {
ImageIO.write(im, "png", new File(imFnm));
} catch (IOException ex) {
Logger.getLogger(MultiSteg.class.getName()).log(Level.SEVERE, null, ex);
}
return true;
}
imBytes
— это необработанные данные о цвете, которые уже были загружены и декодированы из файла. Исходный формат файла значения не имеет. - person Jason C   schedule 16.08.2013imBytes
, и можете ли вы опубликовать изображение искажения, которое вы видите? - person Jason C   schedule 16.08.2013