如何获得许多字节的最低有效位?

时间:2019-04-06 02:11:52

标签: python python-3.x image python-imaging-library

我正在尝试从图像行中获取lsb,我设法到达了这里:

from PIL import Image
import sys

challengeImg = Image.open('image.png')
pixels = challengeImg.load()
for x in range(2944):
    red = (pixels[x,310][0])
    bred = format(red,"b")
    #print(green)
    #print(bred)
    green = (pixels[x,310][1])
    bgreen = format(green,"b")
    #print(bgreen)
    #print(green)

好吧,直到那时我还不错,但是现在我的问题是,我设法创建了以下代码:

num = 10100001
n = 0
lsb = num >> n &1
print(lsb)

它可以工作,但是只有一个字节,我想通过可以实现某些目标,但是我是一个初学者,但是我没有设法使其工作,如何从每个字节中提取lsb在红色通道(或绿色,我想这是相同的过程)的像素行中?

在我看来,我可以使用字典将字节中的位分组(1:10011001,2:01100110 ...),然后使用循环在每个字节中应用lsb代码,无论如何我都不知道我该怎么做,我不认为这是最好的方法(也许甚至无效)。

我有一个2944x1912的.png图片,其中包含隐藏在最低有效位中的信息,我输入的第一个代码是我正在开发的脚本,到目前为止,它所要做的就是获取线310中红色通道的像素并将其转换为二进制。

第二个代码是获取我需要在第一个代码中实现的字节的lsb的代码,因此第二个代码应该以某种方式将8中的所有位分组,并为我选择的最后一个保存在变量中,导致(2944/8 = 368 = 368字节)。

2 个答案:

答案 0 :(得分:0)

我想到的解决方案可能不是最佳的。如果还不够,我会寻找更好的解决方案,但与此同时:

num = 10100001
num_string = str(num)
lsb_string = num_string[len(num_string)-1]
lsb = int(lsb_string)
print(lsb)

# output: 1

答案 1 :(得分:0)

它有效,那就是代码;

partial

谢谢!