본문 바로가기
공부/파이썬 Python

파이썬 RGB 숫자로 색깔 이름 프린트하기 (feat. webcolors)

by 혼밥맨 2022. 6. 20.
반응형

 

파이썬 RGB 숫자로 색깔 이름 프린트하기(feat. webcolors)

RGB를 입력하면 색깔 이름을 프린트하는 코드를 작성한다. 결과는 다음과 같이 나올 수 있도록 한다.

 

 

Input

cname  = RGB(255, 0, 0)

 

Output

Red

 

Input

cname = RGB(254, 1, 1)

 

Output

It is close to Red.

라이브러리

1
2
import webcolors
import matplotlib.pyplot as plt
cs

 

Webcolors

Webcolors 라이브러리는 HTML 및 CSS로 정의된 색상 이름 및 색상 값 형식으로 작업하기 위한 라이브러리입니다.

 

Webcolors Documentation

 

Importing Libraries

1
2
import webcolors
import matplotlib.pyplot as plt
cs

 

가장 유사한 색깔을 계산하는 함수

1
2
3
4
5
6
7
8
def closest_color(rgb):
    differences = {}
    for color_hex, color_name in webcolors.CSS3_HEX_TO_NAMES.items():
        r, g, b = webcolors.hex_to_rgb(color_hex)
        differences[sum([(r - rgb[0]) ** 2,
                         (g - rgb[1]) ** 2,
                         (b - rgb[2]) ** 2])] = color_name
    return differences[min(differences.keys())]
cs

 

정확한 RED color는 RGB가 (255, 0, 0)이다. (254, 0, 0)은 RED가 아니다.

(254, 0, 0) 색깔을 입력했을 때 RED를 반환하기 위해 가장 가장 가까운 색깔을 찾는 함수이다. 

 

예를 들어, 위 함수에 rgb parameter에 (254, 0, 0)를 패스해도 RED를 반환한다.

 

Full Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import webcolors
import matplotlib.pyplot as plt
 
 
def closest_color(rgb):
    differences = {}
    for color_hex, color_name in webcolors.CSS3_HEX_TO_NAMES.items():
        r, g, b = webcolors.hex_to_rgb(color_hex)
        differences[sum([(r - rgb[0]) ** 2,
                         (g - rgb[1]) ** 2,
                         (b - rgb[2]) ** 2])] = color_name
 
    return differences[min(differences.keys())]
 
 
# RGB 색깔을 지정
color = (113241224)
 
try:
    cname = webcolors.rgb_to_name(color)
    print(f"The color is exactly {cname}")
 
except ValueError:
    cname = closest_color(color)
    print(f"The color is closest to {cname}")
 
 
plt.imshow([[color]])
plt.show()
cs

 

결과

color  =  ( 113 ,  241 ,  224 )

 

반응형

댓글