줄리아에서 RGB 색상 코드 사용하는 방법
코드
줄리아에서 색깔을 다루기 위해 제공되는 패키지는 Colors.jl
이다. 시각화 패키지인 Plots.jl
을 불러오면 Colors.jl
내의 기능도 같이 사용할 수 있다. RGB 공간을 표현하는 색상 코드로는 RGB, BGR, RGB24, RGBX, XRGB가 지원되며 이들은 AbstractRGB
의 서브 타입이다. RGBA는 RGB에 투명도가 더해진 것이다.
julia> using Plots
julia> subtypes(AbstractRGB)
5-element Vector{Any}:
BGR
RGB
RGB24
RGBX
XRGB
julia> subtypes(AbstractRGBA)
2-element Vector{Any}:
BGRA
RGBA
문자열
함수 plot()
의 색상을 지정하는 키워드에 문자열로 "rgb(255, 0, 0)"
과 같이 입력하면 RGB 코드가 (255, 0, 0)인 색상을 사용할 수 있다. 사실 아래를 보면 알겠지만 문자열을 입력해도 되는 이유는 plot()
이 문자열만 입력받아도 이를 알아서 파싱해주기 때문으로 보인다. 이름이 있는 색깔의 경우 "red"
나 :red
와 같이 문자열이나 심볼로 사용할 수 있다.
using Plots
r = "rgb(255, 0, 0)" # 정수로 표현된 RGB 빨간색
g = "rgba(0, 255, 0, 0.2)" # 투명도가 0.2인 RGB 초록색
p = "rgb(50%, 0%, 100%)" # 퍼센테이지로 표현된 RGB 보라색
plot(
plot(rand(15), lc = r),
bar(rand(15), fc = g),
scatter(rand(15), mc = p),
layout = (3, 1)
)
파싱
colorant"rgb(0, 0, 0)"
과 같은 식으로 RGB 색상 코드를 파싱할 수 있다.
julia> r = colorant"rgb(255, 0, 0)" # 정수로 표현된 RGB 빨간색
RGB{N0f8}(1.0,0.0,0.0)
julia> g = colorant"rgba(0, 255, 0, 0.2)" # 투명도가 0.2인 초록색
RGBA{N0f8}(0.0,1.0,0.0,0.502)
julia> p = colorant"rgb(50%, 0%, 100%)" # 퍼센테이지로 표현된 RGB 보라색
RGB{N0f8}(0.502,0.0,1.0)
julia> plot(
plot(rand(15), lc = r),
bar(rand(15), fc = g),
scatter(rand(15), mc = p),
layout = (3, 1))
parse(RGB, "rgb(0, 255, 255)")
와 같이 파싱할 수도 있다.
julia> parse(RGB, "rgb(0, 255, 255)")
RGB{N0f8}(0.0,1.0,1.0)
julia> parse(RGBA, "rgba(0, 255, 0, 0.5)")
RGBA{N0f8}(0.0,1.0,0.0,0.502)
직접 정의
함수 RGB()
, RGBA()
등을 사용하면 색상을 직접 정의할 수 있다.
julia> RGB(1, 0, 0)
RGB{N0f8}(1.0,0.0,0.0)
julia> RGB(1.0, 0.0, 0.0)
RGB{Float64}(1.0,0.0,0.0)
julia> RGBA(1, 0, 0.5, 0.5)
RGBA{Float64}(1.0,0.0,0.5,0.5)
colorant
로 파싱된 색상과 정확히 같은 타입을 얻으려면 입력으로 N0f8
타입의 수를 입력해야한다. 이를 사용하기위해서는 FixedPointNumbers.jl
이 필요하다. UInt8
타입의 0에서 255사이의 숫자를 reinterpret하여 사용하거나, 직접 1.0N0f8
과 같이 정의하면 된다. 아래는 빨간색인 colorant"rgb(255, 0, 0)"
과 같은 색상을 반환하는 코드이다.
julia> using FixedPointNumbers
# RGB 빨간색 RGB
julia> colorant"rgb(255, 0, 0)"
RGB{N0f8}(1.0,0.0,0.0)
julia> RGB(1.0, 0.0, 0.0)
RGB{Float64}(1.0,0.0,0.0)
julia> RGB(1.0N0f8, 0N0f8, 0N0f8)
RGB{N0f8}(1.0,0.0,0.0)
julia> RGB(reinterpret(N0f8, UInt8(255)), reinterpret(N0f8, UInt8(0)), reinterpret(N0f8, UInt8(0)))
RGB{N0f8}(1.0,0.0,0.0)
다른 색 공간으로부터 변환
함수 convert()
는 다른 색 공간의 색상 코드를 RGB 코드로 바꿔준다.
julia> using Colors
julia> convert(RGB{N0f8}, HSL(270, 0.5, 0.5))
ERROR: UndefVarError: `N0f8` not defined
julia> using FixedPointNumbers
julia> convert(RGB{N0f8}, HSL(270, 0.5, 0.5))
RGB{N0f8}(0.502,0.251,0.749)
색 이름 얻기
함수 rgb_string()
와 rgba_string()
은 각각 색깔의 RGB, RGBA 코드를 문자열로 반환한다.
julia> rgb_string(colorant"rgba(255, 0, 0, 0.5)")
"rgb(255, 0, 0)"
julia> rgba_string(colorant"rgba(255, 0, 0, 0.5)")
"rgba(255, 0, 0, 0.502)"
julia> rgb_string(colorant"red")
"rgb(255, 0, 0)"
julia> rgb_string(parse(RGB, :blue))
"rgb(0, 0, 255)"
julia> rgb_string(colorant"#00FF00")
"rgb(0, 255, 0)"
같이보기
환경
- OS: Windows11
- Version: Julia 1.9.4, Plots v1.39.0, Colors v0.12.10, FixedPointNumbers v0.8.4