我正在尝试从图像行中获取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字节)。
答案 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
谢谢!