Если вы хотите на самом деле кодировать информацию в изображении вы должны использовать стеганографии (https://en.wikipedia.org/wiki/Steganography)
вики статья проходит вас через основы и показывает и пример картины кошки скрыты в картине деревьев как пример того, как вы можете скрыть информацию. В случае сокрытия текста вы можете сделать следующее:
Кодирование
- Придумайте с фазой: Ради аргумента я буду использовать слово Hidden
- Преобразовать этот текст числовое представление - для простоты я предполагаю преобразование символов ASCII, но не обязательно
«Скрытый» = 72 105 100 100 101 110
- Преобразование числового представления в двоичную
72 = 01001000/105 = 01101001/100 = 01100100/101 = 01100100/110 = 01101110
Для каждой буквы преобразовать 8 бит двоичные представления на четыре 2 бита двоичных представлений, которые мы будем называть мА, мР, Мg, М.Б. по причинам, которые станут ясны в ближайшее время
72 = 01 00 10 00 => 1 0 2 0 = мА мР мГс тВ
Открыть файл изображения для редактирования: Я хотел бы предложить использовать C# для загрузки изображения, а затем использовать Get/Set Пиксели редактировать их (How to manipulate images at the pixel level in C#)
укажите в последние 2 биты каждого цветной канал для каждого пикселя для кодирования вашего сообщения.Например, для кодирования H в первом пикселе изображения вы можете использовать код C# в конце инструкций
Как только все буквы Word - по одному на пиксель - были закодированы в изображении, которое вы сделали.
Декодирование
Используйте тот же основной процесс в обратном направлении.
- Идешь через изображение одного пикселя в то время
- Вы берете 2 значащих битов каждого цветового канала в пикселе
- Вы сцепить LSB вместе в альфа, красный, зеленый, синий заказ ,
- Вы преобразуете конкатенированные биты в 8-битное представление, а затем преобразуете эту двоичную форму в базовую 10. Наконец, вы выполняете поиск на базовом 10-ти в диаграмме ASCII или просто передаете число символу.
- Вы повторяете на следующий пиксель
вещь, чтобы помнить о том, что метод, который я описал, позволит вам кодировать информацию в изображении без человеческого наблюдатель заметил, потому что он манипулирует только изображение на последние 2 бита каждого цветного канала в одном пикселе, и человеческие глаза не могут действительно отличить цвета в диапазоне [(252,252,252,252) => (255,255,255,255)].
Но, как пища для размышлений, я упомянул, что компьютер может с правильными алгоритмами, и проводятся активные исследования в целях повышения способности компьютера выбирать такую вещь.
Так что если вы хотите только поместить водяной знак, тогда это должно сработать, но если вы хотите скрыть что-то, вам нужно зашифровать сообщение, а затем выполнить строганографию на зашифрованном двоичном файле. Поскольку зашифрованные данные MUCH больше, чем обычные текстовые данные, для этого требуется изображение с гораздо большим количеством пикселей.
Вот код для кодирования H в первый пиксель вашего изображения на C#.
//H=72 and needs the following message Alpha, message Red, message Green, message Blue components
mA = 1;
mR = 0;
mG = 2;
mB = 0;
Bitmap myBitmap = new Bitmap("YourImage.bmp");
//pixel 0,0 is the first pixel
Color pixelColor = myBitmap.GetPixel(0, 0);
//the 252 places 1's in the 6 bits that we aren't manipulating so that ANDing with the message bits works
pixelColor = Color.FromArgb(c.A & (252 + mA), c.R & (252 + mR), c.G & (252 + mG), c.B & (252 + mB));
myBitmap.SetPixel(0, 0, pixelColor);
Просьба уточнить. Я не понимаю эту проблему. –
@AltayMazlum, это не проблема, но я отредактирую свой вопрос, чтобы лучше отразить то, что я после –
Я провел некоторое исследование и не пришел к ответу на вашу проблему. Прости. –