Hirst Painting Project

이미지에서 RGB값 추출하기

1


점 그리기

1️⃣ 터틀 모듈 import

2️⃣ turtle모듈의 dot메소드 활용

  • RGB를 사용할 것이기 때문에 colormode 255로 설정
  • 매개변수의 색상은 랜덤모듈 활용
  • 스크린 사라지지 않게 설정
  • 점 10개 그리기

3️⃣ 시작점, 이동경로 설정

  • %(모듈로)사용해서 10개 찍고 다음 줄 이동하게 설정

4️⃣ 속도 설정, 경로 라인 지우기, 터틀 가리기

2


Final Code

# import colorgram
#
# rgb_colors = []
# colors = colorgram.extract('image.jpg', 25)
#
# for color in colors:
#     r = color.rgb.r
#     g = color.rgb.g
#     b = color.rgb.b
#     new_color = (r, g, b)
#     rgb_colors.append(new_color)
#
# print(rgb_colors)

import turtle as turtle_module
import random

turtle_module.colormode(255)
tim = turtle_module.Turtle()
color_list = [(199, 175, 117), (124, 36, 24), (210, 221, 213), (168, 106, 57), (186, 158, 53), (6, 57, 83),
              (109, 67, 85), (113, 161, 175), (22, 122, 174), (64, 153, 138), (39, 36, 36), (76, 40, 48), (9, 67, 47),
              (90, 141, 53), (181, 96, 79), (132, 40, 42), (210, 200, 151), (141, 171, 155), (179, 201, 186),
              (172, 153, 159), (212, 183, 177), (176, 198, 203)]

tim.penup()
tim.setheading(225)
tim.forward(300)
tim.setheading(0)
number_of_dots = 100
tim.speed("fastest")
tim.hideturtle()


for dot_count in range(1, number_of_dots + 1):
    tim.dot(20, random.choice(color_list))
    tim.forward(50)

    if dot_count % 10 == 0:
        tim.setheading(90)
        tim.forward(50)
        tim.setheading(180)
        tim.forward(500)
        tim.setheading(0)


screen = turtle_module.Screen()
screen.exitonclick()



Day19 : More Turtle Graphics, Event Listeners, State and Multiple Instances

파이썬 고차 함수 & 이벤트 리스너

이벤트 리스너 :
사용자가 키보드의 특정 키를 누르는 등의 이벤트를 들을 수 있는 수단


바인딩이란
변수명과 객체를 연결하는 과정
변수명이 객체에 바운드되면 해당 이름을 사용해서 객체에 액세스 할 수 있음


함수를 인수로 사용할 때 주의점

3


고차함수(Higher-order function)

  • 하나 이상의 함수를 인자로 받을 수 있다.
def apply(func, value):
    return func(value)

result = apply(lambda x: x*2, 5)
print(result)  # 출력: 10
  • 함수를 결과로 반환할 수 있다.
def multiply_by(n):
    def multiplier(x):
        return x * n
    return multiplier

double = multiply_by(2)
print(double(5))  # 출력: 10  

4

  • 파이썬에서 꽤 흔히 사용됨. 이벤트를 듣고 특정 함수를 실행시켜야 할 경우 매우 유용하다.
  • 람다 함수와 조합해서 쉽게 사용할 수 있으며, 코드를 더 간결하고 가독성 있게 만들 수 있다.



Make an Etch-a-Sketch

고차함수 이용해서 그림그리기

from turtle import Turtle, Screen

tim = Turtle()
screen = Screen()


def move_forwards():
    tim.forward(10)


def move_backwards():
    tim.backward(10)


def move_left():
    new_heading = tim.heading() + 10
    tim.setheading(new_heading)


def move_right():
    new_heading = tim.heading() - 10
    tim.setheading(new_heading)


def clear():
    tim.clear()
    tim.penup()
    tim.home()
    tim.pendown()


screen.listen()
screen.onkey(move_forwards, "w")
screen.onkey(move_backwards, "s")
screen.onkey(move_left, "a")
screen.onkey(move_right, "d")
screen.onkey(clear, "c")

screen.exitonclick()

5