检查颜色是否在特定颜色范围内

时间:2011-03-17 00:37:50

标签: ruby colors hex rgb rmagick

如何检查rgb或hex值是否在特定颜色范围内?最好是红宝石。

我正在使用ruby和rmagick从图像中提取颜色(量化和color_histogram),然后将这些颜色存储在数据库中。如果有人搜索了类似的颜色(十六进制或rgb),我希望能够返回该颜色。

e.g。如果有人搜索#f4f4f4,我想返回#f5f5f5,#f3f3f3以及所有其他接近的十六进制值。

1 个答案:

答案 0 :(得分:6)

如果将RGB视为三维空间,R,G和B为轴,则可以将“近色”定义为颜色周围的立方体或球体,并返回其中的所有颜色(或检查给定的颜色,如果它足够接近)。配方师非常简单:

Original color R, G, B
Cube with side length L around it:
  All colors between (R - L/2, G - L/2, B - L/2) and (R + L/2, G + L/2, B + L/2)
Sphere with radius R around it:
  New color R_new, G_new, B_new is inside if
    delta_r * delta_r + delta_g * delta_g + delta_b * delta_b < R * R
      where
        delta_r = abs(R - R_new)
        delta_g = abs(G - G_new)
        delta_b = abs(B - B_new)

使用球体而不是立方体是“正确的”方式,但它对于小的方式并没有太大的区别,并且立方体内的颜色更容易计算。