3

2つの配列があります。1つの配列には使用される16進色の値が含まれていますが、もう1つの配列には冗長な16進値が含まれており、参照配列と照合し、その値を参照のインデックスに更新する必要があります。

たとえば、これは私がチェックするリファレンスのサンプル(短縮バージョン)です。

$ref_array = array(4 => '000000', 66 => 'C31AOC', 162 => 'AD2823');

そして、これが参照に可能な限り一致する必要がある配列です。

$orig_array = array('1' => '2be944', 2 => '2f3136', 3 => '88110d');

それらは、orig_arrayがref_arrayに対して適切ではありません。

これがPHPで可能かどうかはわかりませんが、orig_arrayの最初の要素が緑がかった色であり、参照配列で最も近い色が2be944であるため、この例では次のように新しい配列が作成されます。

$new_array('2be944' => 4) 

orig_arrayのインデックス値を保持します

これまたは同様のことをどのように行いますか?

4

3 に答える 3

3

問題への科学的アプローチは別として...

16 進数のカラー コードは、3 つの 2 桁の 16 進数 (RGB 値) で構成されることに注意してください。したがって、最初の 2 桁で 10 進値が大きくなりすぎるため、一度にすべてを実行することはできません)...

これが私がそれを行う方法です。

カラーコードを 3 つの部分に分割できます。

  • R = 2B --> 43 10進数
  • G = E9 --> 10 進数の 233
  • B = 44 --> 10 進数の 68

次に、各色を参照と比較できます (それらを R/G/B に分割することもできます)。

違いを追加すると、組み合わせた違いが最も少ないものが、色の類似性が最も低くなるはずです...

ただし、duskwuff が既に述べたように、色の知覚は主観的な問題です。

于 2012-08-10T21:01:24.137 に答える
2

これを行うにはいくつかの方法があります。2 つの 16 進値の値の違いを見つける関数が必要です。必要に応じて実装できます。違いを見つけるために、10進数に変換する方が簡単かもしれません。配列が 16 進値に基づいてまだソートされていない場合は、配列の各値を取得して比較し、差とインデックスを 2 つの変数に格納することができます。配列を反復処理し、値を配列内の各値と比較します。変数に格納されている値よりも小さい差が見つかった場合は、一時的なインデックス変数と差分変数を新しい小さい差で更新する必要があります。これは、配列全体を処理する必要があるため、あまり効率的ではありません。

たとえば、このリストでは、0 1 4 8 13 19どの数値がその数値に最も近い値であるかを見つけたい場合、10そのリストのどこに 10 が収まるかを見つけて、それを前後の要素と比較するだけで済みます。あなたの答え。

于 2012-08-10T21:05:24.080 に答える
0

2色の「違い」を測定する方法はいくつかあります。どれが他のものより「正しい」かは、一種の主観的な問題です。

ウィキペディアには、色差の下にこの問題に関する記事があります。頭を少し回転させる準備をします。

于 2012-08-10T20:43:08.590 に答える