Python challenge game-mission7 第七关

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() #调用系统打开图像
运行结果:----------------------------------------------

size属性

im.size ⇒ (width, height)
图像的尺寸,按照像素数计算,它的返回值为宽度和高度的二元组(width, height)。

读取RGB

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 ,进入第八关

 

你可能感兴趣的:(Python)