回家后就各种通宵……各种召唤师峡谷。
反正感觉活的很颓废,需要点向上的积极动力
但是我的狗窝不允许
所以我离开了那个颓废的地方
恩。
想起来很早之前有一个朋友和我讨论过的问题。
又想起来在学校就给自己留下的一个问题,
突然感觉有好多事。
一样一样解决。
首先就是一道ctf的隐写题。题目:
看完题目之后。 脑子里是嗡嗡的。
这……这完全不给提示,怎么做。
看完wp更是觉得嗡嗡的:
虽然还是嗡嗡的,但是毕竟别人py脚本都贴出来了,当然心里有点b数了。于是就开始了还原代码的阶段。这是py2。
理清头绪,把每个16进制转换成2进制后,通过0和1的规律排序生成一个二维码。
因为0代表黑,255代表白色。
————————
首先,我放弃了深度学习numpy和pil的念头,
因为
难
好吧立下flag如果下次再遇到这种题就去深入了解这两个库。
但是看懂这个必须要了解一样东西,
Python的列表解析
因为大佬的东西,你就算不会写这种,也要会看,
举个栗子:
bwmat = [[0 if b==blackbit else 255 for b in row] for row in binmat]
如果你没有列表解析的一点点基础,又没有这代码的前后代码。我估计,很难看懂。 为了深入理解我们找几个简单的栗子。
list1=[0 for i in range(10)]//生成十个0组成的列表
list1=[0 if i==3 else 1 for i in range(10)]//生成十个由1组成的列表,如果i等于3那么把那个位置换成0
所以这段代码做到了把1换成了0,把0换成了255
强大吗,是不是又想来一句,
py大法好。
哈哈哈。
然后简单解释一下这个脚本。
————————
defhex2bin(hexmat):
binmattemp = [bin(m)[2:]forminhexmat]
rowlen =max([len(m)forminbinmattemp])
binmat = [[]+[int(b)forbinrow.zfill(rowlen)]forrowinbinmattemp]
print(rowlen+1,'x',len(binmat))
foriinrange(len(binmat)):
print(''.join([str(b)forbinbinmat[i]]))
returnbinmat,rowlen+1,len(binmat)
defrm_col(binmat,col):
temp=[row[:col]+row[col+1:]forrowinbinmat]
print(temp)
return[row[:col]+row[col+1:]forrowinbinmat]
hex2bin这个函数把题目的16进制转换成了2进制并返回了宽高。
原谅我不想深究 不是不想,是我真的笨
rm_col 删除了col 从后面的调用来看是删除了第22个,然后又删除了第7个。也不知道为什么……
还有
zfill
是取指定长度,不足的前面补0
如果是我……
还要什么脚本,最多写个脚本批量调用这个借口……
哈哈哈哈…… 逃
————————
defmake_bw_img(binmat,w,h,outfilename,blackbit=):
bwmat = [[ifb==blackbitelse255forbinrow]forrowinbinmat]
img = Image.fromarray(np.uint8(np.array(bwmat)))
img.save(outfilename)
这里就是通过image.formarray一键生成导出我们的图片
大家可以简单试一试。
from PIL import Image
import numpy as np
a=np.zeros((254,256,3))
b = Image.fromarray(a, mode='RGB')
b.show()
至此,还是有好多问题。
————————
然后是16进制表示图片的问题
这个问题是一个朋友在写爬虫的时候遇到的问题,
不知道大家是否看过这种表示图片的方式:
data:image/png;base64,iVBORw0KGg
在网页中,为了减轻服务器负担,会将图片直接打包在网页中,用的就是这种方式。就不用src引用一个url去访问然后获得图片。
这种方式的缺点就是,浏览器不会缓存,也就是说,我们的爬虫不会get到这个图片。那就gg……
不过,我们可以通过别的方法,下载这种图片:
import base64
a=base64.b64decode("iVBOOH4X/7")
open("1.png","wb").write(a)
恩,可以给文章加一个标题:
Python将16进制转换为图片
以上。
ps,因为中途出去吃饭,完了之后直接被送回家。所以这篇文章还是在我狗窝完成的。
那么,晚安各位。
对了 在py2也就是原脚本中导入image是直接
import image的
但是在3里面,我们需要
from PIL import Image
由于这次代码都是直接贴的,没图片放,就用胖迪做封面了。
领取专属 10元无门槛券
私享最新 技术干货