Hirst Painting Project
이미지에서 RGB값 추출하기
점 그리기
1️⃣ 터틀 모듈 import
2️⃣ turtle모듈의 dot메소드 활용
- RGB를 사용할 것이기 때문에 colormode 255로 설정
- 매개변수의 색상은 랜덤모듈 활용
- 스크린 사라지지 않게 설정
- 점 10개 그리기
3️⃣ 시작점, 이동경로 설정
- %(모듈로)사용해서 10개 찍고 다음 줄 이동하게 설정
4️⃣ 속도 설정, 경로 라인 지우기, 터틀 가리기
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
파이썬 고차 함수 & 이벤트 리스너
이벤트 리스너 :
사용자가 키보드의 특정 키를 누르는 등의 이벤트를 들을 수 있는 수단
바인딩이란
변수명과 객체를 연결하는 과정
변수명이 객체에 바운드되면 해당 이름을 사용해서 객체에 액세스 할 수 있음
함수를 인수로 사용할 때 주의점
고차함수(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
- 파이썬에서 꽤 흔히 사용됨. 이벤트를 듣고 특정 함수를 실행시켜야 할 경우 매우 유용하다.
- 람다 함수와 조합해서 쉽게 사용할 수 있으며, 코드를 더 간결하고 가독성 있게 만들 수 있다.
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()