`
he_lux
  • 浏览: 104091 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

python challenge 7

阅读更多
第七题,画面上就一幅图,页面源码中没有任何注释之类的线索,就只有图片有点奇怪。图片的中间有一个黑白条,估计看能不能从这里入手。 于是需要PYTHON的图形处理功能,网上找了找有个PIL库,需要自行安装,能够读取图片信息,于是初步思路就是先看看那个黑白条有些什么信息再说,摸着石头过河。

本来打算遍历图片所有的像素点信息,看看处于黑白条中的像素点跟其它的像素点有没有什么不同之处,但后面查了点图形方面的资料,发现我这个想法很傻…… 还是先补点基础知识。

---------------------------------------
图片模式:
1 1位像素,黑和白,存成8位的像素
L 8位像素,黑白
P 8位像素,使用调色板映射到任何其他模式
RGB 3×8位像素,真彩
RGBA 4×8位像素,真彩+透明通道
CMYK 4×8位像素,颜色隔离
YCbCr 3×8位像素,彩色视频格式
I 32位整型像素
F 32位浮点型像素

RGB
---------------------------------------

看到网上有人用GIMP,我也安装一个。打开那幅图片,找到黑白条所在的像素区域,将黑白条剪切出来。
import Image

if __name__ == '__main__':

    img = Image.open('7.png')
    
    #left,top,right,bottom
    box = (0, 43, 608, 52)
    
    belt = img.crop(box)
    
    #get a sequence object containing pixel values
    pixels = belt.getdata()
    
    print('mode: %s' % img.mode)
    print('amount of pixel: %d' % len(pixels))
    print(pixels[0])

程序输出:
mode: RGBA
amount of pixel: 5472
(115, 115, 115, 255)

看来这幅图是RGBA模式,黑白条区域共有5472个像素点,第一个像素点的R,G,B,A的值分别为115,115,115,255。

读取图片信息的目的达到了,但怎样从这些信息中获得过关信息呢? 现在图片模式是RGBA-24位,如果是L-8位的话,就可以将每个像素转成ASCII码。PIL可以转换图片模式。于是增加代码:
import Image

if __name__ == '__main__':

    img = Image.open('7.png')
    
    #left,top,right,bottom
    box = (0, 43, 608, 52)
    
    belt = img.crop(box)
    
    #get a sequence object containing pixel values
    pixels = belt.getdata()
    
    print('mode: %s' % img.mode)
    print('amount of pixel: %d' % len(pixels))
    print(pixels[0])
    
    #convert mode RGBA to mode L
    lBelt = belt.convert('L')

    #get a sequence object containing pixel values
    lPixels = lBelt.getdata()
    
    #黑白条中的像素点有规律:每一行的像素点都是一样的,并且一行中也有相同的像素。
    #但有一点不好处理的是:字母间可以通过能否组成单词来判断是否有重复值,但数字
    #就不能通过这种方法来判断了
    str = []
    
    #step 7是通过试验出来的
    for i in range(0, 608, 7):
        str.append(chr(lPixels[i]))
        x = lPixels[i]
        
    print(''.join(str))

输出结果:
smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]
(最开始就是使用了去掉重复值的算法,导致读出来的数字不正确。110变成了10,116变成了16)

这一组数字处于ASCII码中的字母区域,于是转成ASCII码。增加代码:
    result = [105, 110, 116, 101, 103, 114, 105, 116, 121]
    print(''.join(chr(x) for x in result))

输出:integrity     就是它了!

通过做这题让我学习到了图片的一些基础知识,PIL库中Image模块的简单使用。
1
0
分享到:
评论
1 楼 wl6179 2012-04-18  
abruzzi是个大好人~连载这么多PIL的文章……感谢abruzzi!豁然开朗了~~~体验到py的神奇图片世界了~

相关推荐

    python challenge 全部解答

    7. **模块和库**:Python Challenge可能会引导学习者探索标准库和第三方库,例如`os`模块用于操作系统交互,`datetime`模块处理日期和时间,`itertools`模块提供无限迭代器,`requests`库用于网络请求等。...

    Python challenge 3

    在挑战中,参与者需要从指定网址(http://www.pythonchallenge.com/pc/def/ocr.html)获取页面内容,并从中提取特定的信息。接下来,我们将详细探讨此挑战中涉及的关键知识点。 ### 关键知识点一:URL请求 在...

    Python Challenge 题解

    Python Challenge 是一个在线的编程挑战平台,专为Python初学者设计,旨在通过一系列有趣的谜题来提升编程技能。这个挑战包括33个不同的关卡,每个关卡都需要运用Python编程知识来解决。下面将对部分关卡的关键知识...

    www.pythonchallenge.com题解第一题

    在处理这个问题时,你可能会发现一个URL(例如:`http://www.pythonchallenge.com/pc/return/italy.jpg`),这是Python Challenge中常见的线索。你需要使用Python的内置`urllib`库来发送HTTP请求,并获取网页内容。...

    the-python-challenge-solutions.pdf (python挑战题目)

    如果您还没有听说过“Python挑战”,那么现在就试一试吧!我可以等待。 在你翻到下一页之前,要注意这本电子书包含了很多题目 所有的挑战,可能会破坏你的旅程。如果你不关心 如果你不打算吹嘘自己的“成就”,那就...

    python challenge习题答案

    python challenge习题答案,蛮有意思的

    pythonchallenge level2官方方法集

    标题和描述均提到了"pythonchallenge level2官方方法集",这表明文章主要聚焦于Python Challenge网站上第二级挑战的官方解决策略集合。Python Challenge是一个知名的编程谜题网站,通过一系列精心设计的谜题来测试和...

    www.pythonchallenge.com题解第三题

    在本题中,我们面临的是来自www.pythonchallenge.com的一个挑战,这是一个在线平台,旨在帮助学习者提高Python编程技能。挑战通常涉及解决谜题,而这些谜题的答案隐藏在代码或网页的某处。我们将深入探讨如何解第三...

    www.pythonchallenge.com题解第四题

    在本题中,我们将深入探讨Python编程语言在解决在线挑战平台`www.pythonchallenge.com`上的第四关问题。这个挑战通常涉及到一系列的编程技巧、逻辑推理和对网站给出线索的解析。我们将通过分析提供的"level4"文件来...

    python challenge challenge2之java解

    标题“python challenge challenge2之java解”涉及到的是一个Python挑战赛的第二关,而解决方案是通过Java语言来实现的。这个挑战可能是一个编程难题或竞赛,要求参赛者使用特定的技术来解决问题。在这种情况下,...

    每天一个PythonChallenge《任务一》-内含源码以及设计说明书(可以自己运行复现).zip

    7. **社区互动**:PythonChallenge这类平台通常有活跃的社区,用户可以讨论问题、分享解决方案,这不仅有助于学习,也有助于建立编程社群,扩大专业网络。 综上所述,这个压缩包提供了一个全面的学习和实践机会,让...

    www.pythonchallenge.com题解第五题

    在本题中,我们将深入探讨Python编程语言在解决在线挑战平台`www.pythonchallenge.com`上的第五个问题。这个挑战通常会涉及一系列的编程技巧、逻辑思维以及对Python库的运用。我们将通过分析提供的代码和注释,理解...

    www.pythonchallenge.com题解第二题

    在Python Challenge这个在线编程挑战网站上,第二题通常是一个引导初学者进入更复杂问题的起点。这个挑战旨在帮助用户提升Python编程技能,并了解如何利用Python解决实际问题。在这个题解中,我们将深入探讨如何解开...

    每天一个PythonChallenge《任务二》-内含源码以及设计说明书(可以自己运行复现).zip

    在本资源中,我们关注的是一个名为"每天一个PythonChallenge《任务二》"的项目,它包含源码和设计说明书,旨在提供一个学习和实践Python编程的平台。这个挑战可能是系列教程的一部分,鼓励用户通过实际操作来提升...

    每天一个PythonChallenge《任务三》-内含源码以及设计说明书(可以自己运行复现).zip

    在这个PythonChallenge《任务三》中,我们探讨的是一系列基于Python编程的练习,旨在提升技能、理解和解决问题的能力。挑战可能涵盖了各种Python基础知识,包括语法、数据结构、函数、模块、异常处理、文件操作等。...

    PythonChallenge:我对 pythonchallenge.com 的解决方案

    在本项目中,我们探索了"PythonChallenge",这是一个在线平台,旨在帮助用户提升Python编程技能并通过一系列有趣的谜题来解决挑战。这个挑战网站,pythonchallenge.com,以其独特的教学方式吸引了许多初学者和经验...

    python-challenge-源码.rar

    "python-challenge-源码.rar"这个压缩包显然包含了某个Python编程挑战的源代码,可能是某个在线编程课程、比赛或者个人练习项目。通过分析和学习这些源码,我们可以深入了解Python编程的各种技巧和实践应用。 首先...

    pythonchallenge:用于解决http://www.pythonchallenge.com上的难题的Python代码

    PythonChallenge是一个在线编程挑战网站,旨在帮助初学者和有经验的程序员通过解决一系列有趣的谜题来提高他们的Python技能。这个压缩包文件`pythonchallenge-main`很可能包含了解决这些挑战所需的Python源代码。...

    有趣的Python Challenge编程游戏闯关攻略一(0-4关)

    通过分析给出的URL(http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345),我们可以发现这是一个链表结构,其中"nothing"的值不断变化。游戏提示我们使用Python的`urllib`库来处理这个问题,但也...

    Python-Challenge(1)-源码.rar

    Python-Challenge(1)-源码.rar 是一个针对初学者和进阶者提供的Python编程挑战资源,包含Python-Challenge-master文件夹,这个文件夹中很可能包含了练习题目、源代码以及可能的解决方案。Python Challenge是一个在线...

Global site tag (gtag.js) - Google Analytics