从一组十六进制颜色中获取基色

dog*_*c69 12 php colors

我有一组颜色,并希望打破他们到10至20 基地的颜色.

这不应该是传入内容的托盘,而是与传入的内容无关.因此,如果使用的图像只是各种不同的红色,它将只返回红色,可能带有浅/深红色.

EG:我的颜色是下面的方框,输出的例子是线条.因此,从这21个颜色中,列表在此示例中降至8.

在此输入图像描述

上面的十六进制值:

#000000
#ffffff
#003e9f
#d61517
#00a7bd
#001070
#a0210c
#dc9103
#e6151e
#fdfdfd
#011171
#fbfd10
#ffc500
#fdc605
#e6141d
#faf703
#544b20
#796a3a
#7a6b3a
Run Code Online (Sandbox Code Playgroud)

最终输出可能类似于此色轮的外圈 在此输入图像描述

Mar*_*eed 4

提前选择您的base颜色并制作一个数组 - 您可以使用色轮外环中的 12 个颜色。使用关联数组作为输出的集合:对于每种输入颜色,找到最接近的基色并将其作为键添加到输出数组。然后返回该数组的键。

要找到颜色距离,您可以将颜色视为三维空间中的点 (x,y,z) = (r,g,b),并使用欧几里德距离。从十六进制字符串中提取组件后,就像这样:

$dr = $r2 - $r1; 
$dg = $g2 - $g1; 
$db = $b2 - $b1; 
$dist = sqrt($dr * $dr + $dg * $dg + $db * $db);  
Run Code Online (Sandbox Code Playgroud)

如果你愿意的话,你可以用八叉树做一些奇特的事情,但是只要用一小部分颜色在它们上循环并找到最小距离就可以了。