在颜色范围内找到最接近的颜色匹配

时间:2015-10-19 14:03:50

标签: javascript php

我有十个十六进制/ rgb颜色值(它们是肤色) - 我希望能够找到与特定十六进制/ rgb值最接近的匹配。

我会以某种方式从开始颜色迭代直到我落在特定范围内吗?但是我该如何组织范围?

我会说实话,我绝对不知道怎么做,或者甚至要搜索什么,所以任何帮助,或者正确方向的点头都会非常感激。

干杯

3 个答案:

答案 0 :(得分:2)

虽然RGB上的欧几里德距离可能有所帮助,但使用合适的颜色模型会好得多。我会建议LCH或至少HSL。然后为每个通道分配权重。例如,对于人眼来说,亮度以对数标度感知。调低其效果可能会提供更好的匹配。所以,以下情况永远不会发生:

<#>#400(非常暗红色)匹配#222(几乎是黑灰色,距离12)  而不是#800(暗红色,距离16)

答案 1 :(得分:1)

我可以让你使用2种颜色之间的欧几里德距离。如果您有任何2种颜色,例如#89a839和#ad9009,您可以将其转换为3维向量,您将获得这2个向量(ad,90,09)和(89,a8,39); 然后将数字转换为小数范围。并且只计算这两点之间的欧几里德距离

<form action="logo-tshirt.php" method="post">
    <label class="radio-inline"><input type="radio" name="optradio" value="small">S</label>
    <label class="radio-inline"><input checked type="radio" name="optradio" value="medium">M</label>
    <label class="radio-inline"><input type="radio" name="optradio" value="large">L</label>
    <label class="radio-inline"><input type="radio" name="optradio" value="extra-large">XL</label><br />
    <input style="margin-top:5px" type="submit" value="Buy With PayPal" name="send" class="btn btn-primary">
</form>

只要计算您的颜色和所有颜色之间的距离,并找到最小值,那么您的颜色将最接近特定颜色。

如果您对编码有任何问题,请随时提问。

答案 2 :(得分:0)

首先,它不一定是编程问题,而是......

欧几里德距离是一种很好的方法。举个例子:

使用常规的html颜色名称BlueViolet(#8A2BE2)和GoldenRod(#DAA520),它们更接近LightSeaGreen(#20B2AA)?将3个十六进制值拆分为3D矢量:

BV = 138,43,226
GR = 218,165,32
LSG = 32,178,170

使用公式:

d(p,q) = sqrt((px - qx)^2 + (py - qy)^2 + (pz - qz)^2)

d(BV,LSG) = sqrt((138-32)^2 + (43-178)^2 + (226-170)^2)
d(BV,LSG) = sqrt(11236 + 18225 + 3136)
d(BV,LSG) = sqrt(32597)
d(BV,LSG) = 180.546

d(GR,LSG) = sqrt((218-32)^2 + (165-178)^2 + (32-170)^2)
d(GR,LSG) = sqrt(34596 + 169 + 19044)
d(GR,LSG) = sqrt(53809)
d(GR,LSG) = 231.967

因此,您可以看到d(BV,LSG)小于d(GR,LSG),因此BlueViolet比GoldenRod更接近LightSeaGreen。