RGB → HSL

色変換

仕様

 状態:-  閲覧数:2,660  投稿日:2016-04-16  更新日:2016-06-18
RGB からHSL への変換アルゴリズムは、 W3Cの仕様 CSS カラーモジュール Level 3には記載されていない
※HSL から RGBへの変換アルゴリズムは記載されている


RGB → HSL の意味


RGB → HSL を 色モデルで考える


単位


最も一般的な単位
・この他にも任意で設定可能

RGB
名前 R G B 備考
- 0~255 0~255 0~255 -
HSL
名前 H S L 備考
- 0°~360° 0%~100% 0%~100% -


色相H

 閲覧数:482 投稿日:2016-04-16 更新日:2016-06-20
2種類の計算式
・「RGB各成分の基準値」を「最大値」とするか「最小値」とするか、で大きく2種類に分かれる
RGB → HSL 方式の違い


最小値基準の色相H


最も大きな値
・MAX

最も小さな値
・MIN





彩度S

 閲覧数:509 投稿日:2016-04-16 更新日:2016-06-20

円柱モデルを使用


彩度の定義は2種類
・双円錐モデル … 使用しない。用途不明
・円柱モデル … 使用



双円錐モデル
・彩度 … 最大値と最小値の差




円柱モデル
・彩度 … 「最大値と最小値の差」の「255-|最大値と最小値の和-255|」に対する割合






円柱モデル 2種類の計算式比較


Wikipedia
・最終的にはこの式だけ覚えておけばよい
・変形させた結果なので、この式自体からは意味を読み取れない
(MAX-MIN) ÷ (1-|MAX+MIN-1|)

RGBとHSLの相互変換ツールと変換計算式
・上記と比較するとこちらの方がより本来の意味に近い
・しかしそれでも一部変形しているところがある(510=2×255)
・前提が255なので、異なるビットカラーでは値を変更しなくてはいけない
収束値 CNT = (MAX + MIN) ÷ 2
収束値 CNTが127以下の場合 彩度 S = (MAX - MIN) ÷ (MAX + MIN)
収束値 CNTが128以上の場合 彩度 S = (MAX - MIN) ÷ (510 - MAX - MIN)



var MAX = 243;
var MIN = 33;
(MAX-MIN)/(255-Math.abs(MAX+MIN-255)); //0.8974358974358975


RGBからHSLのSを求める計算式。(MAX-MIN)/(1-|MAX+MIN-1|)



彩度Sの意味


・RGBの3値が同じ状態を0%
・彩度上昇にあわせて均等に広がっていく
・RGBの何れかが0もしくは255に到達した段階で100%となる

最初に0%と100%を求める
→ 現在の値が変動幅のうちの何%になるのかを調べれば彩度が求まる


L

 閲覧数:469 投稿日:2016-04-18 更新日:2016-06-20

L


Wikipedia
RGBとHSLの相互変換ツールと変換計算式


(MAX + MIN) ÷ 2


RGB → HSL 変換式 / 約分対応

 閲覧数:485 投稿日:2016-04-18 更新日:2016-06-20

約分対応


約分とは?
・分数の分母と分子を同じ数でわって,分母の小さい分数にすること

対象
(8/4+16/4)/2 = 3

分数の「分母」と「分子」に4を掛ける
・(8+16)/(2×4) = 3

()がないと結果は異なるので注意が必要
・(8+16)/2×4 = 48


RGB → HSL 約分変換式


0≦ (dR,dG,dB) ≦ m のとき、dR,dG,dBの最大値をdMAX,最小値をdMINとすると
・R=dR/m
・G=dG/m
・B=dB/m
・MAX=dMAX/m
・MIN=dMIN/m

Hの式
・分子と分母のmが約分されるので、 dR,dG,dB のまま計算しても同じ値が出る

Sの式
(MAX-MIN)/(1-|MAX+MIN-1|)
=(dMAX/m-dMIN/m)/(1-|dMAX/m+dMIN/m-1|)
=(dMAX-dMIN)/(m-|dMAX+dMIN-m|)

Lの式
(MAX+MIN)/2
=(dMAX/m+dMIN/m)/2
=((dMAX+dMIN)/m)/2
=(dMAX+dMIN)/2m


RGB範囲0 ~ 255


0≦ (dR,dG,dB) ≦ 255 のとき、dR,dG,dBの最大値をdMAX,最小値をdMINとすると
・R=dR/255
・G=dG/255
・B=dB/255
・MAX=dMAX/255
・MIN=dMIN/255

Hの式
・分子と分母の255が約分されるので、 dR,dG,dB のまま計算しても同じ値が出る

Sの式
(MAX-MIN)/(1-|MAX+MIN-1|)
(dMAX/255-dMIN/255)/(1-|dMAX/255+dMIN/255-1|)
(dMAX-dMIN)/(255-|dMAX+dMIN-255|)

Lの式
(MAX+MIN)/2
(dMAX/255+dMIN/255)/2 … 単位変換
((dMAX+dMIN)/255)/2 … 分子の分母を255でまとめる
(dMAX+dMIN)/(2×255) … 分母と分子へ255を掛ける


RGB → HSL 計算例 最小値基準 / RGB 33, 150, 243 → HSL 206.6°, 89.7%, 54.1%

 閲覧数:572 投稿日:2016-05-15 更新日:2016-06-20

RGB 33, 150, 243


R(red)  : 赤色 0~255の数値
G(green): 緑色 0255の数値
B(blue) : 青色 0255の数値
R33, G150, B243


0.RGBの最大値最小値を求める


確認事項
・最大値と最小値は=ではない

最大値
・B243

最小値
・R33


1.Hを求める


最小値Rの式に値を当てはめていく
60×(B-G/MAX-MIN)+180
・60×((243-150)/(243-33))+180=206.571428571
→ 206.6


2.Sを求める


Sの式に値を当てはめていく
(MAX-MIN)/(1-|MAX+MIN-1|)
・(243/255-33/255)/(1-|243/255+33/255-1|)=0.89743589743

%(0~100)表示へ変更
→ 89.7


条件分岐で計算していく方式

収束値 CNT
・(MAX+MIN)/2=138

CNT≧(255/2)の場合のS
・255×(MAX-MIN)/{2×255-(MAX+MIN)}
・(255×(243-33)/(2×255-(243+33))) ÷ 255) × 100=89.7435897436

%(0~100)表示へ変更
→ 89.7





3.Lを求める


Lの式に値を当てはめていく
(MAX+MIN)/2
・(243+33)/2=138
→ 138

%表示へ変更
・「0~255」範囲の値である138を、%(0~100)表示へ変更
・(138 ÷ 255) × 100 =54.1176470588
→ 54.1


今回はたまたま割り切れたけれども本来であればこうすべき
・(243/255+33/255)/2 =0.54117647058

%(0~100)表示へ変更
→ 54.1  




RGB → HSL 変換式 / 最大値基準

 閲覧数:971 投稿日:2016-05-22 更新日:2016-06-05

前提


最も大きな値
・MAX

最も小さな値
・MIN


H


Rが最大値の場合
・色相 H = 60 × ((G - B) ÷ (MAX - MIN))

Gが最大値の場合
・色相 H = 60 × ((B - R) ÷ (MAX - MIN)) +120

Bが最大値の場合
・色相 H = 60 × ((R - G) ÷ (MAX - MIN)) +240

3つとも同じ値の場合
・色相 H = 0

※求められた色相がマイナス値だった場合
・360を加算して0~360の範囲に収める


S


収束値
収束値 CNT = (MAX + MIN) ÷ 2
変動幅
収束値 CNTが127以下の場合 変動幅 = CNT
収束値 CNTが128以上の場合 変動幅 = 255 - CNT
計算式
・0%から100%までの変動幅が分かれば、後は(現在値-収束値)/変動幅で彩度を求めることが可能
収束値 CNTが127以下の場合 彩度 S = (CNT - MIN) ÷ CNT
= 2(CNT - MIN) ÷ 2CNT
= (MAX + MIN - 2MIN) ÷ (MAX + MIN)
= (MAX - MIN) ÷ (MAX + MIN)

収束値 CNTが128以上の場合 彩度 S = (MAX - CNT) ÷ (255 - CNT)
= 2(MAX - CNT) ÷ 2(255 - CNT)
= 2MAX - MAX - MIN ÷ (510 - MAX - MIN)
= (MAX - MIN) ÷ (510 - MAX - MIN)

最終的な彩度計算式
収束値 CNT = (MAX + MIN) ÷ 2
収束値 CNTが127以下の場合 彩度 S = (MAX - MIN) ÷ (MAX + MIN)
収束値 CNTが128以上の場合 彩度 S = (MAX - MIN) ÷ (510 - MAX - MIN)


L


輝度 L = (MAX + MIN) ÷ 2


・RGBとHSLの相互変換ツールと変換計算式

RGB → HSL 最大値基準 / RGB 33, 150, 243 → HSL 206.6°, 89.7%, 54.1%さ

 閲覧数:495 投稿日:2016-05-23 更新日:2016-06-20

0.最大値と最小値を求める


最大値
・B
・243

最小値
・R
・33


H


最大値はB
60 × ((R - G) ÷ (MAX - MIN)) +240
・60 × ((33 - 150) ÷ (243 - 33))+240 = 206.571428571≒ 206.6


S


収束値
・CNT = (243 + 33) ÷ 2 =  138

収束値が128以上で計算
彩度 S = (MAX - MIN) ÷ (510 - MAX - MIN)
・S = (243 - 33) ÷ (510 - 243 - 33) = 0.89743589743≒ 89.7%


L


輝度 L = (MAX + MIN) ÷ 2
・(243 + 33) ÷ 2 =  138

明度範囲が0~100の場合
・(138 ÷ 255) × 100 = 54.1176470588≒ 54.%





色分類

青 / Material UI Colors / Flat UI Colors



週間人気ページランキング / 4-18 → 4-24
順位 ページタイトル抜粋 アクセス数
1 16進数カラーコード / 2進数 25
2 Windows10で「Google Chrome」が常に最前面に表示される。「アクティブウィンドウ」が最前面で表示されない → 解決方法存在しない | Google Chrome(ブラウザ) 13
2 「マウスオーバー」「ロールオーバー」「ホバー」の違い | CSS 13
2 「Font Awesome 4」と「Font Awesome 5」の違い(Font Awesome バージョン4からのアップグレード) | Font Awesome(フォント) 13
3 Chromeデベロッパーツールで、スマホソースコードを確認したいが、USBデバッグ機能をどうしても有効にすることが出来ない | モバイルデザイン(デザイン) 11
4 RGB ⇔ Lab | 色変換(色) 10
5 血の色 / #b30000 / #360800 / #ff0000 | カラーコード(色) 9
6 Design 0 8
7 「Chrome拡張機能」開発中に遭遇したエラー | Chrome 拡張機能 7
8 「bgcolor」「background-color」「background」の違い | CSS 4
8 「z-index」効果を打ち消すスタイルシートは、「z-index:auto;」 4
8 Chrome でキャッシュを効かさない | Google Chrome(ブラウザ) 4
8 max-width: 100%の効果を打ち消すには、max-width: none; | CSS 4
9 「line-height」効果を打ち消すスタイルシートは、「line-height:normal; 3
9 「群青色」「瑠璃色」「ウルトラマリンブルー」の違い 3
10 iframe経由で読み込んでいるページへ直接アクセスした場合は、トップページへリダイレクト | HTML5(HTML) 2
10 ユーザー個別の設定情報が格納されているレジストリキーを削除 2
10 カラーコード / 色コード | カラーコード(色) 2
10 CSSで出来ないこと | CSS 2
10 RGBの種類 / ビットカラー | RGB(色) 2
2024/4/25 1:01 更新