在灰度图像的最低有效图像位中隐藏消息

时间:2016-12-09 01:43:10

标签: python image python-imaging-library steganography

我需要读取用户的消息,迭代消息的每一位并用每个消息位覆盖最低有效图像位。

我目前有一个程序迭代每个图像像素,只是重写图像。

那么我怎样才能读取最不重要的图像位,以及如何获得每个消息位。

这是使用python 3.x

的灰度图像
from PIL import Image

import numpy as np
import bitget
import scipy.misc as smp

im = Image.open("catBlack.png") #Can be many different formats.
pix = im.load()
print (im.size )#Get the width and hight of the image for iterating over
print (pix[1,1]) #Get the RGBA Value of the a pixel of an image
#pix[x,y] = value # Set the RGBA Value of the image (tup


data = np.zeros( (im.size[0],im.size[1],2), dtype=np.uint8 )

for i in range (im.size[0]):
    for j in range (im.size[1]):
        print (i,j)
        data[i,j] = pix[i,j]

im = Image.fromarray(data)
im.save("GreyCat.png")

另外,我将如何解码此消息

欢呼帮助

1 个答案:

答案 0 :(得分:2)

阅读完邮件后,您可以将其转换为ascii代码(ascii范围介于0到127之间),即您需要最大值。 7位代表字母

灰度可以是0到255之间的值,每个像素有8位,因此您可以使用2个最后4位像素来表示一个单词。

例如,您想传输hi

ascii代码h - 73 二进制73 - 1001001 ascii代码i - 74 ascii代码为i -1001010

  • 现在你将像你提到的那样迭代每个像素
  • 读取像素的颜色值将其转换为二进制

假设颜色值为

1111111为第一个像素
0101010为第二个 第三次1100110 1111111为第四个 0001111为第五 1011111为第六个 第七次1100110 第八次1110001 第9届1111111 1010101 for tennth

首先我们必须传输h(01001001),所以我们将改变4个像素的最后两位 新的颜色值将是这样的

1111101,第一个像素
第二次0101000 第三次1100110 第四次1111101

现在对于i(01001010),值将类似于

0001101 for 5th 第六个1011100 第七次1100110 1110010为第八

现在我们将最后一位的剩余像素更改为全零 911 1111100 1010100为第十