第十四题的网址:http://www.pythonchallenge.com/pc/return/italy.html,下面是该题目的截图,特此留念。
这道题的提示如下:- <!-- remember: 100*100 = (100+99+99+98) + (... –>
- 下面的图片,wire.png。
起初真不知道这道题该怎么做……于是上网查找提示信息。终于有了想法。wire.png是10000*1的图片。第一条提示100*100=(100+99+99+98) + (... ,从这可以看出,10000个像素点可以按照100+99+99+98+…分割。这不就是上面图片螺旋分配像素的提示嘛。举个例子,10*10的图片如下:
0 1 2 3 4 5 6 7 8 9
35 … 10
34 11
33 12
32 13
31 14
30 15
29 16
28 17
27 26 25 24 23 22 21 20 19 18
OK了,现在知道应该什么处理了,好了,上代码:
# coding:utf-8
__author__ = 'haiquan'
import Image
import math
#按照图片提示,将wire.png中的10000个像素按照螺旋的方式写入新的图片中。
def spiralDealPic(path):
img=Image.open(path)
print img.size
width=height=(int)(math.sqrt(img.size[0]))
newpic=Image.new("RGB",(width,height));
length=img.size[0]
counter=0
layer=0
while counter<length:
for i in range(layer,width-layer):
pixel=img.getpixel((counter,0))
counter+=1
newpic.putpixel((i,layer),pixel)
for i in range(layer+1,height-layer):
pixel=img.getpixel((counter,0))
counter+=1
newpic.putpixel((width-layer-1,i),pixel)
for i in range(width-layer-2,layer-1,-1):
pixel=img.getpixel((counter,0))
counter+=1
newpic.putpixel((i,height-layer-1),pixel)
for i in range(height-layer-2,layer,-1):
pixel=img.getpixel((counter,0))
counter+=1
newpic.putpixel((layer,i),pixel)
layer+=1
newpic.save('14.png')
newpic.show()
if __name__ == '__main__':
spiralDealPic('wire.png')
好了,现在看看我们转换后的图片是什么样的。
好了,我们知道这是什么动物了吧,对,是cat。让我们试一试新的url了吧, http://www.pythonchallenge.com/pc/return/cat.html,看到如下画面: 嗯,作者提示我们它的猫叫uzi,那我们再试一试, http://www.pythonchallenge.com/pc/return/uzi.html。OK,顺利进入第15题。