Search results for 'PIL'

  1. 2009.12.04 -- pythonchallenge level16
  2. 2009.10.22 -- pythonchallenge level11
  3. 2009.10.16 -- pythonchallenge level9
  4. 2009.10.16 -- pythonchallenge level7

pythonchallenge level16

2009. 12. 4. 08:09

http://www.pythonchallenge.com/pc/return/mozart.html

let me get this straight 라는 글귀와 그림 파일 하나가 덩그라니 있다.
이번엔 소스보기를 해도 별다른 힌트가 보이지 않는다.

어쩌라는 걸까 -_-

이젠 이미지를 보면 먼저 getpixel 로 비비게 된다.. 그런데 특이하게도 getpixel로 리턴되는 값이
RGB 형태가 아닌 그냥 숫자 하나 뿐이다. 왜 그런 것일까.

찾아보니 GIF 파일 포맷에서 사용하는 Indexed Color 때문이라는 것을 알 수 있었다.

장미님 블로그 Indexed Color에 대하여
http://blog.daum.net/ms1719/14382711
Indexed Color WIKIPEDIA http://en.wikipedia.org/wiki/Indexed_color

mozart.gif 파일을 크게 확대해보면 한 라인당 하나의 보라색 뭉텡이 들이 있는 것이 보인다.
getpixel 로 한줄 씩 읽어보니 각 라인마다 195라는 5개의 같은 값이 나타났다.

이 값들을 기준으로 정렬해보니 romance 라는 글자가 희미하게 보인다.
(나중에 안 사실이지만 좀 틀린 부분이 있었다-_-;;)

import Image

im =Image.open("mozart.gif")
im_new = Image.new('RGB',(640,480))

x = im.size[0]
y = im.size[1]

for j in range(y):
        for i in range(x):
                pix = im.getpixel((i,j))
                if pix == 195:
                        num = i
                        break
                
        for a in range(x):
                if num == x:
                        num = 0
                pix = im.getpixel((num,j))
                im_new.putpixel((a,j),pix)
                num += 1
        
im_new.save('result.gif')


http://www.pythonchallenge.com/pc/return/romance.html

'War game > pythonchallenge' 카테고리의 다른 글

pythonchallenge level 17  (1) 2010.10.27
pythonchallenge level 15  (0) 2009.12.03
pythonchallenge level14  (0) 2009.11.17
pythonchallenge level13  (0) 2009.10.22
pythonchallenge level12  (0) 2009.10.22
pythonchallenge level11  (0) 2009.10.22
pythonchallenge level10  (0) 2009.10.20
pythonchallenge level9  (0) 2009.10.16
pythonchallenge level8  (0) 2009.10.16
pythonchallenge level7  (0) 2009.10.16

badcob War game/pythonchallenge

pythonchallenge level11

2009. 10. 22. 19:02


http://www.pythonchallenge.com/pc/return/5808.html

odd even.  cave.jpg 파일을 getpixel로 읽어보니 번갈아서 나오는 값에 규칙이 보여서
홀수번 좌표대로 짝수번 좌표대로 이미지를 만들어보았다.
이제 픽셀 가지고 노는 문제 좀 안나왔으면 싶다

import Image

im = Image.open("cave.jpg")
x = im.size[0]
y = im.size[1]
im2 = Image.new('RGB',(640,480))
im3 = Image.new('RGB',(640,480))
result = []
d = [(1,2),(3,4)]
for a in range(0,x):
    for b in range(0,y):
        result.append(im.getpixel((a,b)))
length = len(result)

k = 0

for i in range(0,x):
    for j in range(0,y):
        if k < length:
            im2.putpixel((i,j),result[k])
            k = k+2

l = 1
for i in range(0,x):
    for j in range(0,y):
        if l < length:
            im2.putpixel((i,j),result[l])
            l= l+2
im2.show()
im3.show()



http://www.pythonchallenge.com/pc/return/evil.html
 

'War game > pythonchallenge' 카테고리의 다른 글

pythonchallenge level16  (0) 2009.12.04
pythonchallenge level 15  (0) 2009.12.03
pythonchallenge level14  (0) 2009.11.17
pythonchallenge level13  (0) 2009.10.22
pythonchallenge level12  (0) 2009.10.22
pythonchallenge level10  (0) 2009.10.20
pythonchallenge level9  (0) 2009.10.16
pythonchallenge level8  (0) 2009.10.16
pythonchallenge level7  (0) 2009.10.16
python challenge level6  (0) 2009.09.21

badcob War game/pythonchallenge

pythonchallenge level9

2009. 10. 16. 17:58

http://www.pythonchallenge.com/pc/return/good.html

first 와 second 라는 숫자들이 있으며  first+second=?  이라고 적혀있다. 
first는146, 399, 163, 403 , 170, 393, 169, 391 이런식으로 나열되어 있다. 먼가 패턴이 있는듯 싶어서
forum의 힌트들과 구글링을 통해  이것이 픽셀을 나타내는 좌표라는 것을 알 수 있었다.
홀수번째 값과 짝수번째 값들을 zip 으로 각각 튜플을 만들어서 first와 second를 합쳐서
이미지로 만들어보았더니 소 모양의 그림이 그려졌다.

import Image import ImageDraw

first = [146,399,163,403,170,393,169,391,166,386,170,381,170,371,170,355,169,346,167,335,170,329,170,320,170,
310,171,301,173,290,178,289,182,287,188,286,190,286,192,291,194,296,195,305,194,307,191,312,190,316,
190,321,192,331,193,338,196,341,197,346,199,352,198,360,197,366,197,373,196,380,197,383,196,387,192,
389,191,392,190,396,189,400,194,401,201,402,208,403,213,402,216,401,219,397,219,393,216,390,215,385,
215,379,213,373,213,365,212,360,210,353,210,347,212,338,213,329,214,319,215,311,215,306,216,296,218,
290,221,283,225,282,233,284,238,287,243,290,250,291,255,294,261,293,265,291,271,291,273,289,278,287,
279,285,281,280,284,278,284,276,287,277,289,283,291,286,294,291,296,295,299,300,301,304,304,320,305,
327,306,332,307,341,306,349,303,354,301,364,301,371,297,375,292,384,291,386,302,393,324,391,333,387,
328,375,329,367,329,353,330,341,331,328,336,319,338,310,341,304,341,285,341,278,343,269,344,262,346,
259,346,251,349,259,349,264,349,273,349,280,349,288,349,295,349,298,354,293,356,286,354,279,352,268,
352,257,351,249,350,234,351,211,352,197,354,185,353,171,351,154,348,147,342,137,339,132,330,122,327,
120,314,116,304,117,293,118,284,118,281,122,275,128,265,129,257,131,244,133,239,134,228,136,221,137,
214,138,209,135,201,132,192,130,184,131,175,129,170,131,159,134,157,134,160,130,170,125,176,114,176,
102,173,103,172,108,171,111,163,115,156,116,149,117,142,116,136,115,129,115,124,115,120,115,115,117,
113,120,109,122,102,122,100,121,95,121,89,115,87,110,82,109,84,118,89,123,93,129,100,130,108,132,110,
133,110,136,107,138,105,140,95,138,86,141,79,149,77,155,81,162,90,165,97,167,99,171,109,171,107,161,
111,156,113,170,115,185,118,208,117,223,121,239,128,251,133,259,136,266,139,276,143,290,148,310,151,
332,155,348,156,353,153,366,149,379,147,394,146,399]

second = [156,141,165,135,169,131,176,130,187,134,191,140,191,146,186,150,179,155,175,157,168,157,163,157,159,
157,158,164,159,175,159,181,157,191,154,197,153,205,153,210,152,212,147,215,146,218,143,220,132,220,
125,217,119,209,116,196,115,185,114,172,114,167,112,161,109,165,107,170,99,171,97,167,89,164,81,162,
77,155,81,148,87,140,96,138,105,141,110,136,111,126,113,129,118,117,128,114,137,115,146,114,155,115,
158,121,157,128,156,134,157,136,156,136]

im = Image.new("RGB", (512, 512), "brown")

draw = ImageDraw.Draw(im)
draw.line(zip(first[0::2], first[1::2]))
draw.line(zip(second[0::2], second[1::2]))
im.save('result.png')
im.show()



http://www.pythonchallenge.com/pc/return/bull.html


'War game > pythonchallenge' 카테고리의 다른 글

pythonchallenge level14  (0) 2009.11.17
pythonchallenge level13  (0) 2009.10.22
pythonchallenge level12  (0) 2009.10.22
pythonchallenge level11  (0) 2009.10.22
pythonchallenge level10  (0) 2009.10.20
pythonchallenge level8  (0) 2009.10.16
pythonchallenge level7  (0) 2009.10.16
python challenge level6  (0) 2009.09.21
python challenge level5  (0) 2009.08.27
pythonchallenge level4  (0) 2009.08.20

badcob War game/pythonchallenge

pythonchallenge level7

2009. 10. 16. 02:12

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

문제의 링크에는  it's in the air. look at the letters. 라고 적혀있다.
공기중에 있는것. oxygen를 url로 입력해보았다.

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

가운데 회색 바가 수상해 보이는 그림 파일 하나가 나온다. Python Imaging Library (PIL)를 사용해
회색 바 부분만을 뽑아내 보자. getpixel method를 사용하면 픽셀별로 RGB값을 튜플로 얻어낼 수 있다.

The Other RGB Color Chart (http://www.tayloredmktg.com/rgb/)에 보면 Gray의 RGB 코드는
190-190-190 이다. 먼저 그림의 세로 픽셀을 조사해서 190-190-190이 나오는 부분을 찾은 뒤에
가로 픽셀을 조사해서 RGB 코드가 다른 값이 나오는 부분까지 구한다. 그렇게 구한 회색바 픽셀들의
RGB 값을 chr 함수로 캐릭터로 바꾸면 읽을 수 있는 문자열들이 보인다.

사용한 코드는 아래와 같다.

import Image
im = Image.open("oxygen.png")
print im.size
x = im.size[0]
y = im.size[1]
print x,y

i=0
j=0
while i < y:
      pix1 = im.getpixel((0,i))
      if pix1[0] == pix1[1] == pix1[2]:
          break
      i += 1

while j < x:
    pix2 = im.getpixel((j,i))
    if not pix2[0] == pix2[1] == pix2[2]:
        break
    j += 1
    
print j,i

temp = ''
result = ''

for a in range(0,j,7):
  pixel = im.getpixel((a,i))
  temp = chr(pixel[1])
  result +=temp
print result



위의 코드를 실행하면 반복된 문자열들이 나타난다.

sssssmmmmmmmaaaaaaarrrrrrrttttttt       ggggggguuuuuuuyyyyyyy,,,,,,,      
yyyyyyyooooooouuuuuuu       mmmmmmmaaaaaaadddddddeeeeeee       iiiiiiittttttt.......      
ttttttthhhhhhheeeeeee       nnnnnnneeeeeeexxxxxxxttttttt       llllllleeeeeeevvvvvvveeeeeeelllllll   
   
이것은 for문에서 range(0,j,7) 이렇게 바꿔서 깔끔하게 볼 수 있었다.

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

'War game > pythonchallenge' 카테고리의 다른 글

pythonchallenge level12  (0) 2009.10.22
pythonchallenge level11  (0) 2009.10.22
pythonchallenge level10  (0) 2009.10.20
pythonchallenge level9  (0) 2009.10.16
pythonchallenge level8  (0) 2009.10.16
python challenge level6  (0) 2009.09.21
python challenge level5  (0) 2009.08.27
pythonchallenge level4  (0) 2009.08.20
pythonchallenge level3  (0) 2009.08.19
pythonchallenge level2  (0) 2009.08.17

badcob War game/pythonchallenge