Я пытаюсь создать сценарий стеганографии изображений в python 3.7.2, используя библиотеку изображений в PIL.Мой сценарий скрытия одного изображения внутри другого не работает должным образом, после того, как сгенерированный файл hidden.png извлекается снова, он выводит либо полностью черные изображения, либо изображения с меньшей контрастностью и разными цветами в зависимости от количества выбранных битов.(Мой сценарий извлечения протестирован и работает.) Обычно я выбираю 4 бита, но он все еще не работает должным образом в 7.
Вот мой код для скрывающего сценария:
def hide(medium, secret_image, lsb):
medimage = Image.open(medium).convert(mode="RGB") #open the medum
secretimage = Image.open(secret_image).convert(mode="RGB") #open the secret image
medimage = medimage.resize(secretimage.size) #resize the medium to be same size as secret
acrossrow = 0 #start at first row
downcol = 0 #start at first column
secret = secretimage.load() #load pixels from secretimage
med = medimage.load()
while acrossrow < secretimage.height:
downcol = 0 #stay first column until reach bottom row
while downcol < secretimage.width:
r, g, b, = secret[acrossrow,downcol] #r,g,b = the rgb of secret image pixel
r = (r >> 8 - lsb) #shift amount of significant bits wanted to the end for hiding
g = (g >> 8 - lsb)
b = (b >> 8 - lsb)
r1, g1, b1 = med[acrossrow,downcol] #more rgb values for medium
r1 = r1 & (0b11111111 << lsb) #remove the last n amount of bits for replacing
g1 = g1 & (0b11111111 << lsb)
b1 = b1 & (0b11111111 << lsb)
r1 = r1 | r #compare medium with secret, combining all 1s
g1 = g1 | g
b1 = b1 | g
med[acrossrow,downcol] = (r1, g1, b1) #send new rgb values to medium
downcol = downcol + 1 #go to next column
acrossrow = acrossrow + 1 #go to next row
medimage.save('hidden.png') #save modified image to new file
medimage.show() #open and display new image
К вашему сведению: medium = путь к носителю, secret_image = путь к секрету, а lsb - количество бит, которые я хочу спрятать из секретного изображения в среду.
Я просмотрел свой код и не могучтобы увидеть проблему, если кто-то может мне помочь, это было бы здорово.Спасибо!
РЕДАКТИРОВАТЬ: Вот ссылка на полный скрипт, если вы хотите его протестировать или построить на нем. Вот ссылка на мой тест hidden.png Вот этотиспользует 2 lsb Вот ссылка на носитель. Вот ссылка на секретное изображение. Для связанного носителя и секретного изображения я использую 4 lsb.