Python/2.7 simple coding(+ c++)

Enigmagroup missions/programming 4

qkqhxla1 2014. 11. 9. 14:24

대충 흑백이 이진수같다는건 알았지만 어떻게할줄 몰라서 여기저기 물어봤었는데.... 


사진에서 1픽셀씩 얻어와서 8자리씩 끊은 후 그걸 십진수로 만들고 아스키코드로 만들면


글자가 된다고 한다. 근데 키값은 얻었는데 문제에 image.php로 전송하라고만 있을뿐


GET인지 POST인지 변수는 뭐로줘야하는지 안알려줘서 이것저것 다해봤는데도 답이 안나온다.


그래서 그냥 답만 내고 포기....


import os,sys,urllib2,Image
 
def download_photo(img_url, filename):
    file_path = "%s%s" % ("C:\\Users\\Ko\\Documents\\Visual Studio 2012\\Projects\\PythonApplication27\\", filename)
    downloaded_image = file(file_path, "wb")
 
    req = urllib2.Request('http://www.enigmagroup.org/missions/programming/4/image.php')
    req.add_header('Cookie','enigmafiedV4=내 쿠키값')
    image_on_web = urllib2.urlopen(req)
    while True:
        buf = image_on_web.read()
        if len(buf) == 0:
            break
        downloaded_image.write(buf)
 
    downloaded_image.close()
    image_on_web.close()
    return file_path
 
download_photo("http://www.enigmagroup.org/missions/programming/4/image.php", "image.png") 
im = Image.open('image.png')
print im.size
bin = ''
for i in range(1,im.size[1]+1): #이미지 픽셀 가로세로 크기 얻어와서 bin에 하나로 주륵 잇는다.
    for j in range(1,im.size[0]+1):
       bin += str(im.getpixel((j-1,i-1)))

answer = ''
before = 0
for i in range(1,im.size[1]*im.size[0]+1): #bin에서 돌아가면서
    if i%8==0: #8글자마다 자름
        answer += chr(int(bin[before:i],2)) #2진수를 십진수로 변화시켜서 아스키코드에 의해 문자로 만든 후 그걸 answer에 잇는다.
        before = i
print answer
print answer[answer.find(':')+1:]








참고하라고 받은 코드인데......(제가 짠게 아니라 받은 겁니다.) 어떻게 이렇게 간단히 코드가 


짜여지는지 놀랍다. 여기에 올려놓고 분석해야지...


from Image import open

def sp(s, n):
    return [s[i*n:i*n+n] for i in xrange(len(s)//n)]

im = open('image.png', 'r')
x, y = im.size

data = ''

for dy in xrange(y):
    for dx in xrange(x):
        data += str(im.getpixel((dx, dy)))

print data
print ''.join(map(lambda x: chr(int(x, 2)), sp(data, 8)))