一 图片解码具体步骤:
1.1
选择要解码的图片副本,decodeImage()函数用于返回图片解码后的隐藏文字,它接受一个图片对象参数。
1.2
获得图片的像素列表,在列表中遍历得到最低有效位的数据。
1.3
找到数据截至处的位置。
1.4
调用binaryToString()函数将二进制字符转换为UTF-8。
1.4.1
用匿名函数lambda实现rec(x与i是形参): lambda x, i: x and (x[2:8] + (i > 1 and rec(x[8:], i-1) or ‘’)) or '。
将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。
示例:
add = lambda x, y: x+y
相当于定义了加法函数lambda x, y: x+y,并将其赋值给变量add,这样变量add就指向了具有加法功能的函数。
这时我们如果执行add(1, 2),其输出结果就为 3。
1.4.2
fun()接受2个参数,第一个参数为表示一个字符的二进制字符串,这个二进制字符串可能有不同的长度(8\16\24…48);第二个参数为这个字符占多少个字节。x[i+1:8]获得第一个字节的数据,然后调用rec(),以递归的方式提取后面字节中的数据。
1.4.3
int()函数中调用fun()获得第一参数数据字符串,第二个参数代表进制。chr()接受一个参数,参数为int值,返回Unicode(UTF-8是UNICODE的一种变长度的编码表达方式)码点为这个int值的字符
1.4.4
最后我们将当前字符的索引增加当前字符的长度,得到下一个字符的索引,并返回字符串。
注意:只有x所在的位置(也即是字节中第一个0之后的数据存储的是真正的字符数据。