http://www.pythonchallenge.com/pc/def/oxygen.html
只有个图片,特别的地方在于有个灰度条,源代码没有任何有用信息,title smarty不知道啥意思,看来应该trick在图片中的条了,先尝试用二进制打开图像,一堆无意义的文件,没找到头绪,也没找到灰条对应信息,那么试着读取一下对应灰度的rgb值看看,深度怀疑这关考图像处理。
百度了一下PIL 处理图像的方法,我们只想获得灰色的RGB,这样涉及到的函数不多:
要从文件加载图像,使用 open() 函数, 在 Image 模块(类):
代码如下:-------------------------------------------
from PIL import Image ##调用库,包含图像类
im = Image.open("3d.jpg") ##文件存在的路径,如果没有路径就是当前目录下文件
im.show() #调用系统打开图像
运行结果:----------------------------------------------
im.size ⇒ (width, height)
图像的尺寸,按照像素数计算,它的返回值为宽度和高度的二元组(width, height)。
from PIL import Image
im = Image.open('XXX.jpg')
pix = im.load()
width = im.size[0]
height = im.size[1]
for x in range(width):
for y in range(height):
r, g, b = pix[x, y]
这样,就用在咱们现在这个上面;
from PIL import Image
image = Image.open('oxgen.jpg') # 打开图像
# image.show()
width, height = image.size # 获取图像尺寸
# print(image.size)
pix = image.load()
s = height // 2
for x in range(width):
print(pix[x,s])
输出结果是:
(115, 115, 115, 255)
(115, 115, 115, 255)
(115, 115, 115, 255)
(115, 115, 115, 255)
(115, 115, 115, 255)
。。。。
注意到最后几行与前面不一样,根据rgb的知识,它肯定不是灰色,回到图片,发现灰色并没有覆盖全部宽度,因此最后部分的信息已经不是我们需要的,这样,我们将不符合灰度设定的去掉。
from PIL import Image
image = Image.open('oxgen.jpg') # 打开图像
# image.show()
width, height = image.size # 获取图像尺寸
# print(image.size)
pix = image.load()
s = height // 2
for x in range(width):
r, g, b, x = pix[x, s]
if r != g:
continue
print(r, end=' ')
输出结果是:115 115 115 115 115 109 109 109 .....49 49 49 93 93 93 93 93 93 93 93, 数字正好在大小写字母的Unicode编码范围,因此,试试print(chr(r), end=' ')一下,结果输出:
“sssssmmmmmmmaaaaaaarrrrrrrttttttt ggggggguuuuuuuyyyyyyy,,,,,,,”.....
这不是个结巴的smart guy吗? 去重一下看看:
from PIL import Image
image = Image.open('oxgen.jpg') # 打开图像
# image.show()
width, height = image.size # 获取图像尺寸
# print(image.size)
pix = image.load()
s = height // 2
ls = []
for x in range(width):
r, g, b, x = pix[x, s]
if r != g:
continue
ls.append(r)
for i in range(len(ls)):
if i%7 == 0:
print(chr(ls[i]), end='')
输出:smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121], 那么狠明显了,继续chr吧
ls = [105, 110, 116, 101, 103, 114, 105, 116, 121]
for l in ls:
print(chr(l), end='')
输出integrity。 试试url,http://www.pythonchallenge.com/pc/def/integrity.html ,进入第八关