Python 是否有任何原因导致png的lsb中的位以低于或高于1位的偏移量变化
我创建了一个简单的python脚本,将png R G和B的LSB中的二进制文本保存成一行。它工作得很好,但有时其中一个位会发生变化,在描述过程中,我得到的是,例如,当与ascii值相关时,用“`”代替“a”,用“e”代替“d”偏移量为1Python 是否有任何原因导致png的lsb中的位以低于或高于1位的偏移量变化,python,binary,png,python-imaging-library,steganography,Python,Binary,Png,Python Imaging Library,Steganography,我创建了一个简单的python脚本,将png R G和B的LSB中的二进制文本保存成一行。它工作得很好,但有时其中一个位会发生变化,在描述过程中,我得到的是,例如,当与ascii值相关时,用“`”代替“a”,用“e”代替“d”偏移量为1 def encode(img, bin_str): new_img_data = [] new_pixel = () i = 0 img_data = img.getdata() isDone = False fo
def encode(img, bin_str):
new_img_data = []
new_pixel = ()
i = 0
img_data = img.getdata()
isDone = False
for pixel in img_data:
for color_part in pixel:
if i < len(bin_str):
binary = bin(color_part)[2:].zfill(8)
binary = binary[:7] + bin_str[i]
new_pixel += (int(binary, 2),)
i += 1
else:
isDone = True
if isDone is True:
new_pixel = pixel
new_img_data.append((new_pixel))
new_pixel = ()
new_img = Image.new(img.mode, img.size)
new_img.putdata(new_img_data)
return new_img
def decode(img, payload_len):
img_data = img.getdata()
solution = ""
i = 0
for pixel in img_data:
for color_part in pixel:
if i < payload_len:
solution += bin(color_part)[2:].zfill(8)[7]
i += 1
print(solution)
print(bin_to_string(solution))#convert 8 bits to number and takes the ascii of it
def编码(img,bin_str):
新的img数据=[]
新像素=()
i=0
img_data=img.getdata()
isDone=False
对于img_数据中的像素:
对于像素中的颜色部分:
如果我
您能否提供一个示例输入及其相应的错误输出?我无法复制您的结果。当然,例如,我编码0110001(十进制为97,ascii值为小写a),解码在最后一位打印01100000(十进制为96,ascii为`)偏移量信息不足<代码>bin_str='0110001';slen=len(bin_str);解码(编码(img、bin_str、slen)打印与bin_str
相同的内容。或者你正在使用一个允许特殊情况bug表达自己的图像,或者你对我上面所做的做了一些其他的事情,例如,将中间图像保存到jpeg或其他东西。您需要提供足够的信息来复制错误。