[Ruby] RGB値を色の三属性に変換するメソッド 彩度編
個人アプリ作成していて、RGB値、つまり色の三原色を、色の三属性に変換するメソッドを作成しました。
今回は彩度を導くメソッドを紹介します。
色の三属性とは
色の三属性とは色相、明度、彩度を表します。
色相とはその色の"色味"を表します。
明度はその色の明るさを表します。色の反射率に関係していて、白は明度が高く、黒は明度が低くなります。
彩度はその色の鮮やかさを表しています。オレンジなどの派手な色は彩度が高く、白や黒のようなくすんだ色は彩度が低くなります。
彩度の計算式
計算式はいろんなサイトに載ってますが、以下のサイトがわかりやすかったです。立体図形を用いて紹介してくれています。
RGB成分のうちの最大値をImax, 最小値をIminとすると
彩度S = (Imax - Imin) / Imax
となります。
Rubyのメソッドで彩度を求める
メソッドは以下となります。
def wear_chroma(red, green, blue)
max_val = [red, green, blue].max
min_val = [red, green, blue].min
chroma = ((max_val - min_val) / max_val.to_f).round(2)
end
割とそのまんまですね。
Rubyだと整数÷整数で小数になってしまうと結果が0になるため、割る数を小数変換しています。
roundメソッドで小数点以下第二位までの数値としています。
まとめ
色の三属性が取れるとおすすめ機能なんかに役立てることができます。
私はデザイナーではありませんが、デザイン得意な方が利用したらいいものが開発できるのではないでしょうか。
次回は明度を紹介します〜
この記事が気に入ったらサポートをしてみませんか?