My Drive

pythonchallenge #07 - image 본문

writeup

pythonchallenge #07 - image

sunnyeo.park 2014. 12. 9. 12:42

# 일곱 번째 문제

이 문제는 예전에 http://xcz.kr/ 에서 본 적이 있는 문제이다. 한칸한칸 rgb값을 이용해서 문자를 만드는 문제 였는데 이전에는 길이가 짧기도 했고, python을 이용해서 할 수 있는지 모르고 직접 손으로 풀었었던 기억이 있다.


pythonchallenge 문제이니 python에 이런 기능을 해주는 모듈이 존재하는 것 같다.


이미지의 픽셀을 읽는 방법을 찾아보니, PIL(Python Image Library) 이라는 것이 존재했다.

아래 사이트에서 다운받을 수 있다.

http://www.pythonware.com/products/pil/

이 라이브러리를 이용하여 rgb값을 읽어 올 수 있는 것을 알았고, 이제 나한테 필요한 값이 어떤 규칙을 가지고 있는지 찾아보았다.


이미지 파일을 받아서 그림판으로 열고 색 선택 기능을 이용해 첫번째 네모를 클릭한 후 RGB값을 보니 세 개가 일치하였다. 몇 가지 더 확인을 해보니 모두 RGB값이 같은 것을 확인 할 수 있었다.


처음에는 아래와 같이 모든 픽셀 중에서 rgb값이 같은 것을 골라내었다.

결과는 엄청 많이 나온다... 생각해보니 네모 한칸은 한 픽셀이 아니었고, 저 네모 외에도 rgb값이 같은 것이 있을 수 있었다.


그래서 이번에는 모든 픽셀이 아니라 x축은 전체를, y축은 정가운데만 확인하여 출력해보았다.

제대로 된 값이 나왔다는 것을 알 수 있었지만 여전히 반복된 것이 있었다. 


같은 횟수로 반복되는 것도 아니어서 전과 같은 값이 나오면 출력하지 않도록 해보았다.

이번에는 성공한 듯 싶어 rgb중 한 값을 아스키코드에 맞게 문자로 출력하도록 해보았다.


결과는 아래와 같았는데, 문제가 좀 있었다.

smart guy, you made it. the next level is [105, 10, 16, 101, 103, 14, 105, 16, 121]

전과 같은 값을 모두 출력하지 않다보니 같은 문자나 숫자가 연속으로 나오는 것을 생각하지 못했다.

이번에는 반복이 너무 많이 될 경우는 출력하도록 바꿔보았다. 그리고 나온 값을 아스키 값으로 바꾸었다.

결과는 아래와 같이 제대로 나왔고,

smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]

답은 integrity


그러므로

http://www.pythonchallenge.com/pc/def/integrity.html

위와같이 url을 바꿔주면 다음단계로 넘어간다.



※ Image

참고사이트 : http://effbot.org/imagingbook/image.htm

http://kylog.tistory.com/17




'writeup' 카테고리의 다른 글

pythonchallenge #09 - ImageDraw  (0) 2014.12.09
pythonchallenge #08 - bz2  (0) 2014.12.09
pythonchallenge #06 - zipfile  (0) 2014.12.03
pythonchallenge #05 - pickle  (0) 2014.12.02
pythonchallenge #04 - html  (0) 2014.12.01
Comments