유랑하는 나그네의 갱생 기록

だけど素敵な明日を願っている -HANABI, Mr.children-

Security & Hacking/pythonchallenge.com

python challenge 7

Madirony 2019. 7. 28. 03:57
728x90

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

파이썬 챌린지 7

oxygen.html로 들어왔습니다.

 

HTML 코드 열어봐도 힌트 메시지 같은건 안보여요.

힌트 이미지에 그어져 있는 흑백 줄무늬 띠를 이용해서 푸는 문제 입니다.

 

파이썬에서 이미지를 처리하려면 pillow 라이브러리를 사용하면 됩니다.

 

설치는

pip install Pillow

 

근데 아나콘다가 깔려있으면 따로 안깔아도 돼요.

 

 

이제 힌트 이미지를 받아와서 만져봅시다.

 

이미지 파일을 열고 잘라낼 픽셀 좌표를 확인을 합니다.

 

좌표를 확인하다보니 눈에 띄는 값이 있었습니다.

RGB값이 일정하네요.

이 점 염두에 두고 코드를 작성해봅시다.

 

일단 이미지부터 잘라볼게요.

 

from PIL import Image
img = Image.open('./oxygen.png')
px = img.load()
cropp = (0,42,607,50)
cropped_img = img.crop(cropp)
cropped_img.show()

 

 PIL은 파이썬에서 이미지를 편집하기 위한 라이브러리고,

Pillow를 깔았지만 PIL을 사용하는 것은 Pillow가 PIL을 계승했기 때문입니다.

 

이미지를 여는 메소드는  open()

이미지 픽셀에 접근하는 메소드는 load()

이미지를 잘라 내는 메소드는 crop()

이미지를 보여주는 메소드는 show()

이미지를 저장하는 메소드는 save()

 

저장할땐 파일 경로 지정해주면 되고 일단 이쁘게 잘리나 확인해 보겠습니다.

 

대충 crop 했습니다.

y축 좌표를 중간쯤으로 해서 활용하면 될 것 같습니다.

 

 

from PIL import Image
img = Image.open('./cropped.bmp')
px = img.load()
for pixels in range(0,img.size[0],7):
	pix = px[pixels,5]
    print(pix)

 

이미지 크기는 파일 정보에서도 볼 수 있는데

print(img.size)로 알 수 있어요.

가로 607px , 세로 8px

 

load() 메소드로 픽셀에 접근해서 픽셀의 RGB값을 출력 합니다.

픽셀 간격을 7px씩 늘려가면서 가로 길이까지 for문 반복하구요.

 

코드를 실행해보면 ..

이미지에서 튜플 형태로 RGB 값이 나옵니다.

아... 아스키코드 마렵다....

 

 

아스키코드라 치고 변형 시켜보아요.

from PIL import Image
img = Image.open('./cropped.bmp')
px = img.load()
print(img.size)
for pixels in range(0,img.size[0],7):
	pix = px[pixels,5]
	print(chr(pix[0]),end='')

 

print문을 조금 손봤어요.

end='' 로 보기좋게 출력합시다.

 

 

거의 다 풀었습니다~

이제 저 숫자들도 문자로 바꿔보아요.

 

pixxx = [105, 110, 116, 101, 103, 114, 105, 116, 121]

print("".join(map(lambda x: chr(x),pixxx)))

 

lambda 형식을 사용하였는데

lambda 형식이 무엇이냐

 

함수를 한 줄로 표현할 수 있는 기능을 합니다.

 

map()은 함수와 리스트를 인자로 받고 거시기해서 새로운 리스트에 담아주는 함수에요.

그니까 pixxx에 있는 리스트에 있는 값들을 chr()에 넣고 리스트로 저장하는 겁니다.

 

intergrity가 출력되었네요.

integrity.html로 갑시다.

 

 

 

뭔가 알차게 설명하고 싶었는데

시간에 비해 분량이 적네요 ;ㅅ;

728x90

'Security & Hacking > pythonchallenge.com' 카테고리의 다른 글

python challenge 9  (0) 2019.07.30
python challenge 8  (0) 2019.07.29
python challenge 6  (0) 2019.07.27
python challenge 5  (0) 2019.07.13
python challenge 4  (0) 2019.07.13