[Python Challenge] 파이썬 챌린지 - 7
페이지에 들어가면 또 불친절하게 사진 한장만이 덜렁 있다.
강가의 사진을 보여주는데 중간헤 회색 바로 색깔이 변하는 것을 알 수 있다.
직감적으로 이미지를 받아 분석하면 답을 얻을 수 있다고 생각이 든다.
이미지를 읽고 편집하기 위해서는 파이썬의 PIL 패키지를 사용하여야 한다.
$pip install PIL 을 입력하여 패키지를 설치한다.
urllib을 이용하여 사진을 다운로드 받는다.
중간에 회색들을 읽기 위하여 대략적인 수도 코드를 구상해보자.
사진 불러오기 -> 세로를 검색하며 처음 회색인 픽셀 찾기 -> 가로로 픽셀들을 읽어 색깔이 달라지는 경우를 포착하여 가로값 읽기
-> 회색이 아닌 픽셀이 아닐 때까지 읽어 값을 리스트로 정리하기 -> 데이터 분석
회색 값들을 읽기 위한 사각형의 위치를 알기 위한 코드를 작성해 보면 아래와 같다.
코드를 실행해 보면 다음과 같은 값을 얻을 수 있다.
43
5
43
12
처음 회색의 위치는 (0,43)부터 시작하며 첫 사각형의 가로의 길이는 5, 다음 사각형의 가로의 길이는 7이라는 것을 알 수 있다.
(순수 코드로 하기 위해서는 처음 사각형의 가로 길이가 7이면 좋은데,, 왜 5인지는 잘 모르겠다. )
이를 통하여 값을 읽어 리스트로 저장하여 보자.
수도 코드는 다음과 같다.
이미지 읽어오기 -> 읽어올 단위 설정 -> 같은 회색 블럭 단위로 읽음
for 회색 가로 줄에 대하여 : 회색 값을 문자로 변환해 리스트로 저장
--> 저장후 문자열로 출력
문자열의 숫자를 정규표현식을 이용 리스트로 저장-> 숫자-> 글자로 변환
문자열 출력
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import urllib from PIL import Image file_URL = "http://www.pythonchallenge.com/pc/def/oxygen.png" img_file = urllib.urlopen(file_URL).read() import os if not os.path.exists("oxygen.png") : fp = open("oxygen.png", 'wb') fp.write(img_file) fp.close() img = Image.open('oxygen.png') width = img.width height = 0 while True : r,g,b,a = img.getpixel((0,height)) if r==g==b: break height += 1 width_interval = 7 print "image width : " + `width` print "pixel height position : " + `height` print "pixel width : " + `width_interval` my_list = [] for x in range(0, width, width_interval) : try: r,g,b,a = img.getpixel((x,height)) print "read (" + `x` + "," + `height` + ")" if(r == g == b) : my_list.append(chr(r)) except: break my_str = "".join(my_list) print my_str import re next_list_num = map(int,re.findall("\d+",my_str)) next_list_char = map(chr,next_list_num) print "".join(next_list_char) | cs |
결과 출력은 다음과 같다.
smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]
integrity