查找颜色范围

时间:2009-08-05 05:44:09

标签: php colors range rgb

我想从一个RGB值

的值中找到一系列颜色

如果给我rgb(0,100,200),它会给我rgb(0,0,255)和rgb(0,255,255)之间的所有内容。但不是rgb(255,0,255)。

同样rgb(150,50,0)。返回:rgb(255,0,0)和rgb(255,255,0)。不是rgb(255,0,255)。

有意义吗?

我正在使用PHP

2 个答案:

答案 0 :(得分:4)

你解释的算法基本上是:“一种颜色由两个RGB组件组成。让最强的RGB组件为S,另一个组件为O.创建255个变体,让S为(255),O为0到255 。“

E.g。以下所有示例都会产生相同的结果:

a) rgb(0,100,200) 
b) rgb(0,199,200)
c) rgb(0,254,255)
d) rgb(0,1,2)

Result: rgb(0,[0-255],255)

这意味着您只有6种变体。

  1. 红色是最大的组成部分,绿色是次大的=> RGB(255,[0-255],0)
  2. 红色是最大的组件,蓝色是下一个最大的组件=> RGB(255,0,[0-255])
  3. 绿色是最大的组成部分,红色是次要的最大=> RGB([0-255],255,0)
  4. Green是最大的组件,Blue是最大的组件=> RGB([0-255],0255)
  5. 蓝色是最大的组件,红色是下一个最大的组件=> RGB([0-255],0255)
  6. 蓝色是最大的组件,绿色次大=> RGB(0,[0-255],255)
  7. 你的算法的意图不明确,所以我猜你的用例实际上与你解释的不同。它不处理1或3个组件的颜色(实际上大多数颜色)。

    如果您的目标是找到相似的颜色(例如某个距离的颜色),那么有更好的方法。例如,您可以将颜色转换为HSV颜色空间(色调,饱和度,值),然后如果组件H,S或V中的任何一个与原始颜色相差+/- 10步,则表示颜色相似。

    例如:

    rgb(255,100,0)=> HSV(24100100)

    你的范围是hsv([14-34],[90-110],[90-110])

答案 1 :(得分:0)

嗯,我不确定我是否正确理解这一点,但我认为你说的其中一个数字高于其他数字,其中一个数值总是为零。如果是这种情况,您应该能够使用类似于

的简单if-else语句
if (r > g && r > b) {
  if (g > 0) {
    color1 = rgb(255, 0, 0);
    color2 = rgb(255, 255, 0);
  }
  else {
    color1 = rgb(255, 0, 0);
    color2 = rgb(255, 0, 255);
  }
}
else if (r < g && g > b) {
   .
   .
   .
}

希望能帮到你解决问题。