logo

줄리아에서 RGB 색상 코드 사용하는 방법 📂줄리아

줄리아에서 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

같이 보기