12

私は色のセットを持っています、そしてそれらを10から20の基本色に分解したいと思います。

これは、渡されるもののパレットではなく、渡されるものとは無関係である必要があります。したがって、さまざまな色合いの赤の画像が使用された場合、赤のみが返され、おそらく明るい/暗い赤が返されます。

EG:私が持っている色は下のボックスで、出力の例は線です。したがって、この例では、21色からリストは8色になります。

ここに画像の説明を入力してください

上記の16進値:

#000000
#ffffff
#003e9f
#d61517
#00a7bd
#001070
#a0210c
#dc9103
#e6151e
#fdfdfd
#011171
#fbfd10
#ffc500
#fdc605
#e6141d
#faf703
#544b20
#796a3a
#7a6b3a

最終的な出力は、このカラーホイールの外輪のようなものになる可能性がありますここに画像の説明を入力してください

4

2 に答える 2

4

事前に色を選んbaseで配列を作成します。カラーホイールの外輪に12を使用できます。連想配列を出力のセットとして使用します。入力色ごとに、最も近い基本色を見つけて、それを出力配列のキーとして追加します。次に、その配列のキーを返します。

色の距離を見つけるには、色を3次元空間の点(x、y、z)=(r、g、b)として扱い、ユークリッド距離を使用します。16進文字列からコンポーネントを抽出すると、次のようになります。

$dr = $r2 - $r1; 
$dg = $g2 - $g1; 
$db = $b2 - $b1; 
$dist = sqrt($dr * $dr + $dg * $dg + $db * $db);  

必要に応じて、八分木で何か凝ったことをすることもできますが、色のリストが少ない場合は、八分木をループして最小距離を見つけるだけで問題ありません。

于 2012-12-19T02:47:59.150 に答える
1

hsla表記を使用すると、これを行う(そして理解する)のがはるかに簡単になると思います。

基本色が常に同じである場合は、色相パラメーターに20の値(基本的には0°から360°の角度)を定義し、必要なすべての異なる色を最も近い「基本色」にのみグループ化できます。色相。

基本色が入力に依存している場合(質問では明確ではありません)、色の距離を見つける@Mark Reedのオプションは、色相のみを使用してhslでも実行できます。これは、次の概念により正確です。 「色合い」私見。

注意:hsl用の便利なツール:http://mothereffinghsl.com/

于 2012-12-19T10:18:55.857 に答える