logo

ジュリアのカラー処理のためのパッケージ 📂ジュリア

ジュリアのカラー処理のためのパッケージ

概要1

Juliaで色処理のためのパッケージであるColors.jlの機能について紹介する。視覚化パッケージであるPlots.jlを使う場合はColors.jlを別に読み込む必要はない。以下の機能を提供する。

  • 色のパースと変換
  • 色マップ
  • 色スケール

パースと変換

strを色情報を表した文字列とすると、@colorant_strまたはparse(Colorant, str)を通じて文字列を特定の色空間の色コードにパースできる。なお、colorantは染料、色素などの意味を持つ英単語である。

julia> using Colors

julia> colorant"red"
RGB{N0f8}(1.0,0.0,0.0)

julia> colorant"rgb(255, 0, 0)"
RGB{N0f8}(1.0,0.0,0.0)

julia> parse(Colorant, "rgba(0, 255, 0, 0.5)")
RGBA{N0f8}(0.0,1.0,0.0,0.502)

julia> parse(Colorant, "#FF0000")
RGB{N0f8}(1.0,0.0,0.0)

julia> parse(Colorant, "hsl(120, 100%, 25%)")
HSL{Float32}(120.0f0,1.0f0,0.25f0)

convert()関数で他の色空間の色コードに変換できる。

julia> convert(RGB, HSL(270, 0.5, 0.5))
RGB{Float64}(0.5,0.25,0.75)

色の補間

range()関数を通じて色を補間interpolationできる。この動作は非常に論理的で直感的である。例えば、RGBコードを考えてみよう。赤はRGBコードで$(255, 0, 0)$または$(1, 0, 0)$で表され、これは実質的に3次元ベクトルと同じだ。したがって、二つのベクトル間を補間するrange()関数の引数として色コードを使う理由はない。

julia> v1 = [1.0, 0.0, 0.0];

julia> v2 = [0.0, 0.5, 0.0];

julia> collect(range(v1, v2, length = 15))
15-element Vector{Vector{Float64}}:
 [1.0, 0.0, 0.0]
 [0.9285714285714286, 0.03571428571428571, 0.0]
 [0.8571428571428572, 0.07142857142857142, 0.0]
 [0.7857142857142857, 0.10714285714285714, 0.0]
 [0.7142857142857143, 0.14285714285714285, 0.0]
 [0.6428571428571428, 0.17857142857142858, 0.0]
 [0.5714285714285714, 0.21428571428571427, 0.0]
 [0.5, 0.25, 0.0]
 [0.4285714285714286, 0.2857142857142857, 0.0]
 [0.3571428571428571, 0.32142857142857145, 0.0]
 [0.2857142857142857, 0.35714285714285715, 0.0]
 [0.2142857142857143, 0.39285714285714285, 0.0]
 [0.1428571428571429, 0.42857142857142855, 0.0]
 [0.0714285714285714, 0.4642857142857143, 0.0]
 [0.0, 0.5, 0.0]

julia> c1 = colorant"rgb(255, 0, 0)"
RGB{N0f8}(1.0,0.0,0.0)

julia> c2 = colorant"rgb(0, 128, 0)"
RGB{N0f8}(0.0,0.502,0.0)

julia> range(colorant"rgb(255,0,0)", colorant"rgb(0,128,0)", length=15)
15-element Array{RGB{N0f8},1} with eltype RGB{FixedPointNumbers.N0f8}:
 RGB{N0f8}(1.0,0.0,0.0)
 RGB{N0f8}(0.929,0.035,0.0)
 RGB{N0f8}(0.859,0.071,0.0)
 RGB{N0f8}(0.784,0.11,0.0)
 RGB{N0f8}(0.714,0.145,0.0)
 RGB{N0f8}(0.643,0.18,0.0)
 RGB{N0f8}(0.573,0.216,0.0)
 RGB{N0f8}(0.502,0.251,0.0)
 RGB{N0f8}(0.427,0.286,0.0)
 RGB{N0f8}(0.357,0.322,0.0)
 RGB{N0f8}(0.286,0.357,0.0)
 RGB{N0f8}(0.216,0.392,0.0)
 RGB{N0f8}(0.141,0.431,0.0)
 RGB{N0f8}(0.071,0.467,0.0)
 RGB{N0f8}(0.0,0.502,0.0)

上記の色レンジの視覚化は、VS CodeでJulia拡張機能をインストールして実行すると以下のように得られる。

また、range()の戻り値はパレットとして使用できる。

my_palette = range(colorant"rgb(255,0,0)", colorant"rgb(0,128,0)", length=15)

plot(rand(10, 15), palette = my_palette)

環境

  • OS: Windows11
  • Version: Julia 1.9.4, Plots v1.39.0, Colors v0.12.10

関連項目