python challenge 7学习过程

今天有空,随即想起来可以学习一下,python challenge 7。

首先登录第七题的网站,发现显示一张图片,老办法,直接查看网页源码。

发现源码没什么用,就把图片下载下来,准备处理图片中那条“黑白灰”的条码。

from urllib import urlretrieve
urlretrieve("http://www.pythonchallenge.com/pc/def/oxygen.png","oxygen.png")
img = Image.open("oxygen.png")

图片下载好后,获取图片的基本属性,确定黑白条码的区域,这些是在终端下完成的(没办法,水平有限。。。):

我的做法是首先读取横坐标为10、纵坐标为0~94的所有像素,会发现在坐标(10,43)~(10,51)的数据很整齐,便可初步确定,条码高度只有8个像素,同理,宽度也可确定为607个像素:

python challenge 7学习过程_第1张图片

而后将图片转换为灰阶图像:

img1 = img.crop((0,43,607,53)).convert("L")
print img1.size,img1.mode
接下来,对裁剪后的图像进行横向读取

python challenge 7学习过程_第2张图片

将读取的像素值转换为ASII码:

这时,我们已经可以初步看清是什么信息了,对该字串进行计算:

最后用chr()将那几个数字转换成字母:

这就是下一题的钥匙。

代码如下:

# -*- coding:utf-8 -*-
from urllib import urlretrieve
from PIL import Image
import sys
urlretrieve("http://www.pythonchallenge.com/pc/def/oxygen.png","oxygen.png")
img = Image.open("oxygen.png")
width,height = img.size
print "width = ",width
print "height = ",height
# 43-53,0-607
img1 = img.crop((0,43,607,53)).convert("L")
s1 = ""
for x in range(img1.size[0]):
    s1 += chr(int(img1.getpixel((x,5))))
cnt = 0
s2 = ""
for x in s1:
    cnt += 1
    if cnt==7:
        s2 += x
        cnt = 0
l1 = s2[42:-1].split(",")
for x in l1:
    sys.stdout.write(chr(int(x.strip())))
代码丑陋,请见谅。。。

你可能感兴趣的:(python)