挑战地址,点我

分析

图片中间有一条灰色带,就像打了马赛克,右键查看网页源代码也没有任何提示信息。

那应该需要处理这条灰色的马赛克了,python 标准库中并没有处理图片的,需要用到第三方图像处理模块 pillow。

#!/usr/bin/env/ python3

import urllib.request

import io

from PIL import Image

# 从图片链接读取

url = 'http://www.pythonchallenge.com/pc/def/oxygen.png'

with urllib.request.urlopen(url) as f:

im = Image.open(io.BytesIO(f.read()))

# 输出图片大小

print(im.size)

输出结果:

(629, 95)

图片宽 629,高 95。

灰色带大概在图片中间部位(可以找些软件确定下是否是中间),查看下对应的像素信息:

#!/usr/bin/env/ python3

import urllib.request

import io

from PIL import Image

url = 'http://www.pythonchallenge.com/pc/def/oxygen.png'

with urllib.request.urlopen(url) as f:

im = Image.open(io.BytesIO(f.read()))

width, height = im.size

row = (height + 1) / 2

for col in range(width):

pixel = im.getpixel((col, row))

print(pixel)

输出结果:

(115, 115, 115, 255)

(115, 115, 115, 255)

(115, 115, 115, 255)

...省略

(93, 93, 93, 255)

(93, 93, 93, 255)

(119, 120, 78, 255)

(111, 112, 70, 255)

...省略

可以看到中间灰色带像素的 RGB 是相同的,先筛选灰色带,只打印 RGB 一个通道的值看下,有什么规律:

#!/usr/bin/env/ python3

import urllib.request

import io

from PIL import Image

url = 'http://www.pythonchallenge.com/pc/def/oxygen.png'

with urllib.request.urlopen(url) as f:

im = Image.open(io.BytesIO(f.read()))

width, height = im.size

row = (height + 1) / 2

for col in range(width):

pixel = im.getpixel((col, row))

if pixel[0] != pixel[1]:

continue

print(pixel[0], end=" ")

输出结果:

115 115 115 115 115 109 109 109 109 109 109 109 97 97 97 97 97 97 97 114 114 114 114 114 114 114 116 116 116 116 116 116 116 32 32 32 32 32 32 32 103 103 103 103 103 103 103 117 117 117 117 117 117 117 121 121 121 121 121 121 121 44 44 44 44 44 44 44 32 32 32 32 32 32 32 121 121 121 121 121 121 121 111 111 111 111 111 111 111 117 117 117 117 117 117 117 32 32 32 32 32 32 32 109 109 109 109 109 109 109 97 97 97 97 97 97 97 100 100 100 100 100 100 100 101 101 101 101 101 101 101 32 32 32 32 32 32 32 105 105 105 105 105 105 105 116 116 116 116 116 116 116 46 46 46 46 46 46 46 32 32 32 32 32 32 32 116 116 116 116 116 116 116 104 104 104 104 104 104 104 101 101 101 101 101 101 101 32 32 32 32 32 32 32 110 110 110 110 110 110 110 101 101 101 101 101 101 101 120 120 120 120 120 120 120 116 116 116 116 116 116 116 32 32 32 32 32 32 32 108 108 108 108 108 108 108 101 101 101 101 101 101 101 118 118 118 118 118 118 118 101 101 101 101 101 101 101 108 108 108 108 108 108 108 32 32 32 32 32 32 32 105 105 105 105 105 105 105 115 115 115 115 115 115 115 32 32 32 32 32 32 32 91 91 91 91 91 91 91 49 49 49 49 49 49 49 48 48 48 48 48 48 48 53 53 53 53 53 53 53 44 44 44 44 44 44 44 32 32 32 32 32 32 32 49 49 49 49 49 49 49 49 49 49 49 49 49 49 48 48 48 48 48 48 48 44 44 44 44 44 44 44 32 32 32 32 32 32 32 49 49 49 49 49 49 49 49 49 49 49 49 49 49 54 54 54 54 54 54 54 44 44 44 44 44 44 44 32 32 32 32 32 32 32 49 49 49 49 49 49 49 48 48 48 48 48 48 48 49 49 49 49 49 49 49 44 44 44 44 44 44 44 32 32 32 32 32 32 32 49 49 49 49 49 49 49 48 48 48 48 48 48 48 51 51 51 51 51 51 51 44 44 44 44 44 44 44 32 32 32 32 32 32 32 49 49 49 49 49 49 49 49 49 49 49 49 49 49 52 52 52 52 52 52 52 44 44 44 44 44 44 44 32 32 32 32 32 32 32 49 49 49 49 49 49 49 48 48 48 48 48 48 48 53 53 53 53 53 53 53 44 44 44 44 44 44 44 32 32 32 32 32 32 32 49 49 49 49 49 49 49 49 49 49 49 49 49 49 54 54 54 54 54 54 54 44 44 44 44 44 44 44 32 32 32 32 32 32 32 49 49 49 49 49 49 49 50 50 50 50 50 50 50 49 49 49 49 49 49 49 93 93 93 93 93 93 93 93

可以看到像素值按照一定规律重复着,第一组 115 重复了 5 次,中间都重复了 7 次,最后的 93 重复了 8 次。

这些数字如果和 ASCII 码关联起来,115 -> s, 109 -> m, 97 -> a,也许会组成有意义的字符。

按照上面的规律,可以每隔 7 个字符取一个数字:

#!/usr/bin/env/ python3

import urllib.request

import io

from PIL import Image

url = 'http://www.pythonchallenge.com/pc/def/oxygen.png'

with urllib.request.urlopen(url) as f:

im = Image.open(io.BytesIO(f.read()))

width, height = im.size

row = (height + 1) / 2

for col in range(width):

pixel = im.getpixel((col, row))

if pixel[0] != pixel[1]:

continue

if col % 7 == 0:

print(chr(pixel[0]), end="")

输出内容:

smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]

果然就是这样的规律,按照提示,需要把 [105, 110, 116, 101, 103, 114, 105, 116, 121] 再转换成 ASCII 码。

#!/usr/bin/env/ python3

level = [105, 110, 116, 101, 103, 114, 105, 116, 121]

for l in level:

print(chr(l), end="")

输出内容:

integrity

参考资源:

python第七关_[Python Challenge通关]第7关 smarty相关推荐

  1. python教程七牛云_通过Python来使用七牛云存储的方法详解

    本教程旨在介绍如何使用七牛的Python SDK来快速地进行文件上传,下载,处理,管理等工作. 安装 首先,要使用Python的SDK必须要先安装.七牛的Python SDK是开源的,托管在Githu ...

  2. python3 将列表中元素转化为字典_软件测试学Python(七):Python中的变量和标准数据类型...

    上一篇文章中,凯哥给大家介绍了Python中的常量(字面值). 测试凯哥:软件测试学Python(六):Python中的常量​zhuanlan.zhihu.com 在这篇文章中,凯哥带各位学习测试的知 ...

  3. python灰度图片格式_[Python图像处理] 十五.图像的灰度线性变换

    [Python图像处理] 十五.图像的灰度线性变换 发布时间:2019-03-28 00:08, 浏览次数:619 , 标签: Python 该系列文章是讲解Python OpenCV图像处理知识,前 ...

  4. python多进程编程实例_[python] Python多进程编程技术实例分析

    这篇文章主要介绍了Python多进程编程技术,包括了线程.队列.同步等概念及相关的技巧总结,需要的朋友可以参考下 本文以实例形式分析了Python多进程编程技术,有助于进一步Python程序设计技巧. ...

  5. python查看excel编码格式_[Python]实现处理读写xlsx xls excel文件格式(含中文处理方法)...

    最近有个需求要处理excel 格式的数据,数据量比较大.用传统的语言似乎不太好处理,于是改用python实现,这里记录一下实现过程. 首先,科普一下xlsx xls的excel文件区别是什么. xls ...

  6. python快速爬虫视频_“python怎么快速爬虫视频“python 爬网页视频教程

    用python怎样爬网页 # coding:utf8 import cookielib import urllib2 url = "http://blog.uouo123.com" ...

  7. python朋友圈刷屏_“Python太火了!请救救Java!”9万程序员刷屏朋友圈 !

    没想到有生之年,笔者能观察到"霸主陨落"的过程,继PLPY4月榜单官宣,Python躺赢,再度"夺"冠,实力甩下Java和C后,近期,Stack Overflo ...

  8. python 打包 小文件_[Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件

    1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...

  9. python shell如何打开_“python shell怎么打开“python shell启动教程

    python shell怎么打开 1.简介:如何在python中运行shell(bash命令) 2.工具/原料:python库:os.py 3.方法:import os command = 'date ...

  10. python输出文本居中_#python PIL ImageDraw text 文本居中#

    python pip pil有什么东西 你所问的问题实是属1.先参考[教程]Python中的内置的和方的模块搞懂PIL是属于第三方Python模块2.再参考:[待完善][总结]Python安装第三方的 ...

最新文章

  1. There are no interfaces on which a capture can be done.
  2. 从零开始学python数据分析-从零开始学Python数据分析(视频教学版)
  3. Annotation 的第一个工程
  4. Codeforces 1138B Circus (构造方程+暴力)
  5. Python isalpha()方法
  6. Mr.J-- HTTP学习笔记(八)-- 网关
  7. php网站接入微信支付,PHP接入微信H5支付的方法示例
  8. 【LINQ】Linq to SQL -- Where语句
  9. 【数据结构(C语言)】数据结构-查找
  10. IE浏览器提示对象不支持“append”属性或方法
  11. FISCO BCOS(四)——— 在Ubantu上安装python3.8
  12. Linux的ftp设置
  13. [JS6] 通过用户事件事件执行脚本
  14. 通过ip地址定位计算机,局域网通过IP地址如何找到电脑的位置
  15. 超声波传感器测距实验430
  16. 晶闸管相控交流调压的详细计算
  17. 张子保:不忘初心 方得始终《原创》
  18. 电商品牌私域流量社群运营推广裂变sop搭建营销计划表格方案
  19. 苏州市区公积金与园区公积金新政策-乙类对比 (包括住房公积金)
  20. c语言1106回文数,Codeforces 1106 简要题解

热门文章

  1. liunx 清理磁盘垃圾文件
  2. IT老齐架构300讲笔记(047) 避坑分享财Z部金财平台用主键用了UUID后出现的问题
  3. JS截取//后面或前面的字符串
  4. R语言dplyr包summarise_at函数计算dataframe数据中多个数据列(通过向量指定)的计数个数、均值和中位数、使用funs函数指定函数列表
  5. 唐僧是如何管理人才的
  6. 如何测试sql服务器的性能测试,SQL执行效率和性能测试方法
  7. 基于JAVA多媒体素材管理系统计算机毕业设计源码+系统+lw文档+部署
  8. 网络管理命令6— Pathping 命令
  9. JSON文本互转及JsonNode,ObjectNode,ArrayNode简单理解
  10. 计科二班摸底考试题解