Saturday, April 16, 2011

Python Challenge level 7

import Image
import re

im = Image.open('oxygen.png')
pix = im.convert('L').getdata()
message = []
for i in range(0,608,7):
    message.append(chr(pix[im.size[0]*43+i]))
print ''.join(message)
print ''.join([chr(int(i)) for i in re.findall('[0-9][0-9]*', ''.join(message))])

這關真的是超卡,提示就只給一張圖

雖然上面有明顯的一條灰線,但就是不知道怎麼decode

後來找到要用額外的library: PIL 去分析圖片
(我一直以為會是Build-in library...所以尋找了很久很久)

然後用getpixel((x,y))去看,發現每個區塊的顏色RGB都相等

就可以先利用convert轉成L模式
( L = R * 299/1000 + G * 587/1000 + B * 114/1000 )

在這種狀況下L=R=G=B,接著選43~51列其中一列,在每個顏色區塊中選定一個pixel來處理

第一個跟最後一個區塊分別有5,8個pixel,所以range的開頭0~4都ok

終於搞懂了,真開心。

0 comments:

Post a Comment