[解決済み] 16進カラーが「黒すぎる」ことを確認するには?
2022-06-22 13:50:24
質問
カラーピッカーで選んだ色の暗さを評価して、それが "黒すぎる" かどうかを確認し、もしそうなら白に設定しようとしています。16進数の値の最初の文字を使って、これを実行できると思いました。これは動作していますが、いくつかの合法的な明るい色も切り替えています。
私はこれを行うコードを持っています。
if (lightcolor.substring(0,3) == "#00"|| lightcolor.substring(0,3) == "#010"){
lightcolor="#FFFFFF";
color=lightcolor;
}
色があるレベルの暗さを超えたことを知るために、hex 数学を使ったより効率的な方法があるはずです。例えば、lightcolor + "ある16進値" <= "ある16進値" ならば、それを白に設定するように。
tinyColorを追加しましたので、これに使えるかもしれませんが、確かなことはわかりません。
どのように解決するのですか?
RGBの3つの成分を個別に抽出し、標準的な計算式でRGBの値を知覚できる明るさに変換する必要があります。
6 文字の色を想定した場合。
var c = c.substring(1); // strip #
var rgb = parseInt(c, 16); // convert rrggbb to decimal
var r = (rgb >> 16) & 0xff; // extract red
var g = (rgb >> 8) & 0xff; // extract green
var b = (rgb >> 0) & 0xff; // extract blue
var luma = 0.2126 * r + 0.7152 * g + 0.0722 * b; // per ITU-R BT.709
if (luma < 40) {
// pick a different colour
}
EDIT
2014年5月より
tinycolor
は、現在では
getBrightness()
関数が追加されました。ただし、上記の ITU-R の重み付け係数の代わりに CCIR601 の重み付け係数が使用されています。
EDIT
この結果、ルーマ値の範囲は 0 ~ 255 となり、0 が最も暗く、255 が最も明るくなります。128より大きい値は、以下のように明るいとみなされます。
tinycolor
. (恥ずかしながら @pau.moreno と @Alnitak のコメントからコピーしたものです)
関連
-
vueの補間表現とv-textディレクティブの違いについて
-
[解決済み] テスト
-
[解決済み】Node.jsで "Cannot find module "エラーを解決するには?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
元のイベントが実行されなかった後に要素を追加するためのjQueryソリューション
-
vueのグローバルがscss(mixin)を導入。
-
vueディレクティブv-bindの使用と注意点
-
Vueのクラススタイルの使い方の詳細
-
[解決済み】最大呼び出しスタックサイズ超過エラー
-
[解決済み】ローカルファイルを開くことができません - Chrome: ローカルリソースの読み込みが許可されていない
-
[解決済み】"フォームが接続されていないため、フォームの送信がキャンセルされました "というエラーの取得について
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み】JavaScriptでインラインIF文の書き方は?
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules