我使用PIL在Python中使用基本隐写术脚本时遇到问题。
这是我的目标:我想存储我要隐藏的图像的每个波段的像素值的四个MSB。然后将它们存储在另一个图像的四个LSB中。为了揭示隐藏的图像,我只想提取四个LSB并添加' 0000'。
我知道这是非常具有破坏性的。但隐藏的图像至少应该消失。实际上并没有。我不知道我的代码有什么问题。你能帮帮我吗?
from PIL import Image
global image, pixels, s_image, s_pixels
def hide_stegano():
def new_pixel(pix, s_pix):
return (pix & 240) | ((s_pix & 240) >> 4)
l, h = image.size
temp = Image.new('RGB', (l, h))
temp_pix = temp.load()
for i in range(l):
for j in range(h):
rgb = list(pixels[i, j])
s_rgb = list(s_pixels[i, j])
for band, (value, s_value) in enumerate(zip(rgb, s_rgb)):
rgb[band] = new_pixel(value, s_value)
temp_pix[i, j] = tuple(rgb)
temp.save("temp.jpg")
temp.show()
def reveal_stegano():
def new_pixel(pix):
return (pix & 15) << 4
l, h = image.size
temp = Image.new('RGB', (l, h))
temp_pix = temp.load()
for i in range(l):
for j in range(h):
rgb = list(pixels[i, j])
for band, value in enumerate(rgb):
rgb[band] = new_pixel(value)
temp_pix[i, j] = tuple(rgb)
temp.save("temp.jpg")
temp.show()
image = Image.open("image1.jpg").convert('RGB')
pixels = image.load()
image.show()
# Hidden image
s_image = Image.open("image2.jpg").convert('RGB')
s_image = s_image.resize(image.size)
s_pixels = image.load()
s_image.show()
hide_stegano()
reveal_stegano()
你看错了吗?
祝你好运