私は、RGB値の配列を持っている:Javascriptを - 目に見える差に基づいてソート色
var arr = [[255, 255, 255], [100, 100, 100], [255, 0, 0], etc...]
私はので、同様のhttps://github.com/markusn/color-diffの一部であるCIEDE2000
を使用して目に見える差に基づいて、私のRGB値を手配したいのです色は近くにあります。
私がこれまで行ってきたことは、すべてのRGB値をLABに変換してから、2番目の配列の配列を作成することでした。各値は[i, difference]
です。i
は、difference
の値が参照する最初の配列の元の場所を表します。そして、difference
値は、元の配列のその特定の色と黒の間のCIEDE2000
によって計算される差です。
次に、2番目の配列を昇順でソートします。問題は、これが私が探しているソートされた配列にはならないということです。
次のシナリオを想像:
オリジナル色:[[dark blue], [orange], [light blue], [slightly brighter orange]]
(私は、明確にするためにRGB値を書いていないよ。)
問題はブルースということです[[dark blue], [orange], [slightly lighter orange], [light blue]]
に分類されます分割されます。ダークブルーは実際には視覚的に黒色に最も近く、薄い青色が最も遠いので、それらは分割されます。たとえ彼らがオレンジから遠く離れていても、黒とは異なる量のものです。
元のカラー配列を並べ替えて、適切に並べ替えられた配列を返すにはどうすればよいですか?
上記のようにソートする必要があります。ブルースは、オレンジの前または後にある場合、それは問題ではありませんが
[[dark blue], [light blue], [orange], [slightly lighter orange]]
。彼らがすべて一緒である限り。実際のシナリオでは、私は何千もの色を持っていました。
ありがとうございます!
これはちょっと運命のようです。 RGBは3次元の値なので、線順にソートする正しい方法はあいまいです。他のアプローチにもオープンですか? – Jacob
違いを計算したり、色の "値"を与える式がありますか? – epascarello
'color-diff'の関数は、2つのLAB値を取り、1から100までの差分値を出力します.1は視覚的に同じです。 100は視覚的に反対である。 – abagshaw