(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


Ответы (1 шт):

Автор решения: lian

Было необходимо использовать только '.png' файлы.

→ Ссылка