3

我有两个数组,一个数组包含将使用的十六进制颜色值,而另一个数组包含冗余的十六进制值,需要与参考数组匹配,并将其值更新为参考的索引。

例如,这是我将要检查的参考的示例(缩短版)。

$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

除了对此事的科学方法...

请记住,十六进制颜色代码由三个 2 位十六进制数字(RGB 值)组成!所以你不能一次全部完成,因为前两位数字会增加你的十进制值太多)......

这就是我将如何做到的。

您可以将颜色代码分成 3 个部分:

  • R = 2B --> 43 十进制
  • G = E9 --> 233 十进制
  • B = 44 --> 68 十进制

然后,您可以将每种颜色与参考进行比较(也将它们分成 R/G/B)。

如果您添加差异,则组合差异最小的那个应该提供接近的颜色相似性......

虽然,正如黄昏已经提到的,颜色感知是一个主观问题。

于 2012-08-10T21:01:24.137 回答
2

有几种方法可以做到这一点。您需要一个函数来查找 2 个十六进制值之间的值差异。您可以随心所欲地实现它。将其转换为十进制以查找差异可能更容易。如果您的数组尚未根据十六进制值排序,那么您可以做的是获取数组的每个值并比较它并将差异和索引存储在 2 个变量中。遍历数组并将该值与数组中的每个值进行比较,每当您发现差异小于存储在变量中的差异时,您应该使用新的较小差异更新临时索引和差异变量。这不是很有效,因为它需要您遍历整个数组。

例如,在这个列表中:0 1 4 8 13 19如果你想找到哪个数字的值最接近这个数字,10那么你需要做的就是找到 10 适合该列表的位置,然后将它与之前和之后的元素进行比较,你就会有你的答案。

于 2012-08-10T21:05:24.080 回答
0

有多种方法可以测量两种颜色的“差异”。哪些比其他更“正确”是一种主观问题。

维基百科在色差下有一篇关于此事的文章。准备让你的头有点旋转。

于 2012-08-10T20:43:08.590 回答