2

さまざまな 16 進数の色 (>6500) の膨大なリストがあり、非常に暗い色と非常に明るい色を削除したいと考えています。

これどうやってするの?明るい色と暗い色の 16 進数のカラー コードを除外するために使用できる特定の特徴はありますか? それらを整数に変換する必要がありますか..?

ありがとうございました!

4

2 に答える 2

1

この関数は、正規表現を使用して文字列値を解析し、0 (黒) から 1 (100% 白) までの明るさを返します。

function hexBrightness(hex) {
    var regExp = hex.length < 6 ? /^#(([a-f\d]))(([a-f\d]))(([a-f\d]))$/i : /^#([a-f\d])([a-f\d])([a-f\d])([a-f\d])([a-f\d])([a-f\d])$/i;

    var result = regExp.exec(hex);
    if (result) {
        var r = parseInt("" + result[1] + result[2], 16),
            g = parseInt("" + result[3] + result[4], 16),
            b = parseInt("" + result[5] + result[6], 16),
            max = Math.max(r, g, b),
            min = Math.min(r, g, b),
            l = (max + min) / 2;
        return l / 255;
    }
    return null;
}

// Test
var assert = function (assertion, name) {
    $("<p/>").appendTo(document.body).text(name + (assertion ? ' works' : ' fails'))
}
assert(hexBrightness('#FFFFFF') == 1, 'Uppercase');
assert(hexBrightness('#ffffff') == 1, 'Lowercase');
assert(hexBrightness('#fff') == 1, 'Short');
assert(hexBrightness('#000') == 0, 'Black');
assert(hexBrightness('invalid') == null, 'Invalid color');

作業フィドル: http://jsfiddle.net/L7PqT/

于 2013-03-26T16:22:01.377 に答える
1

これは、次のような簡単で汚い方法です。

16 進数の色を R/G/B バイトに分けます。

16 進数のバイトを 10 進数に変換し、それらを合計して 3 で割ると、平均的な「明るさ」の大まかなアイデアが得られます。

色の明るさの上限と下限を 0 から 255 の最大範囲内で選択し、これら 2 つの制限外のものを除外します。

例えば

#FFBBAA => FF BB AA => ( 255 + 187 + 170 ) / 3 = 204.

「明るさ」の上限を 200 とすると、この色は明るすぎます。設定する制限は完全に主観的なものなので、あなた次第です。

16 進数で直接計算を行うことに慣れている場合は、10 進数への変換を完全にスキップして、すべての計算を 16 進数のままにすることができます。

于 2013-03-26T16:17:33.473 に答える