(Least Significant Bit, LSB) Python
При реализации алгоритма LSB на Python столкнулся со следующей проблемой: После замены младших битов исходного изображения я сохраняю изменённую версию как новое изображение. Но после дальнейшего его чтения с целью декодирования обнаруживаю, что пиксели остались неизменными. Функция, где происходит кодирование и запись:
def insertData(self, data_to_insert, container_path, image_path):
img = Image.open(container_path, 'r')
pixels_array = np.array(list(img.getdata()))
total_pixels = pixels_array.size // 3
width, height = img.size
reqired_pixels = len(data_to_insert)
if reqired_pixels > total_pixels:
print('ERROR: largrer file required')
else:
index = 0
for pixel in range(total_pixels):
for code in range(3):
if index < reqired_pixels:
seven_bits = bin(pixels_array[pixel][code])[2:9]
eighth_bit = data_to_insert[index]
pixels_array[pixel][code] = int(seven_bits + eighth_bit, 2)
index += 1
pixels_array = pixels_array.reshape(height, width, 3)
enc_img = Image.fromarray(pixels_array.astype('uint8'))
enc_img.save(image_path)
Для теста использую изображение 8x8 px полностью белое.
Пример сообщения в виде строки: "bob$t3g0"
В формате '08b': 0110001001101111011000100010010001110100001100110110011100110000