【问题标题】:Getting colors from image that are most Visually Prominent with PHP使用 PHP 从图像中获取最显眼的颜色
【发布时间】:2011-05-04 06:25:24
【问题描述】:

问题:是否可以在php中获取颜色亮度值?

我想要做的是使用 PHP 从图像中获得最“视觉上突出”的颜色。我已经经历了所有的 Stack Overflow,但我无法找到任何解决方案。

目前我已经建立了一个图像颜色搜索,它遍历图像的每个像素,存储颜色,计算色差和亮度值,然后将它们存储在数据库中。

问题:结果在数学上是正确的,但是它们与先前匹配颜色的图像在视觉上并不准确。我认为某种亮度比较可能会解决这个问题。

我注意到,当我按升序(从低到高)对结果进行排序时,结果实际上更准确(尽管在某些情况下不那么准确)。这意味着颜色出现值远低于订购 DESC(最高优先)时的值。

为了计算“亮度”,我使用这个——我不相信它那么强大:

function luminance($pixel){

   $pixel = sprintf('%06x',$pixel);
   $red = hexdec(substr($pixel,0,2))*0.30;
   $green = hexdec(substr($pixel,2,2))*0.59;
   $blue = hexdec(substr($pixel,4))*0.11;

   return $red+$green+$blue;
}

这是一个显示问题的场景: http://twitpic.com/33e23p http://twitpic.com/33e3x0

我也开始怀疑我的颜色距离函数是否找不到最相似的颜色:

function colorDistance(array $color1, array $color2) {
  return sqrt(pow($color1[0] - $color2[0], 2) +
    pow($color1[1] - $color2[1], 2) +
    pow($color1[2] - $color2[2], 2));
}

【问题讨论】:

    标签: php image colors gd


    【解决方案1】:

    由于您的色彩空间是 standard RGB,维基百科文章 Luminance (relative) 说您在 R、G 和 B 上的乘数应该是

    • R:0.21
    • G:0.72
    • B:0.07

    而不是你所拥有的。所以

    function luminance($pixel){
    
       $pixel = sprintf('%06x',$pixel);
       $red = hexdec(substr($pixel,0,2))*0.21;
       $green = hexdec(substr($pixel,2,2))*0.72;
       $blue = hexdec(substr($pixel,4))*0.07;
    
       return $red+$green+$blue;
    }
    

    【讨论】:

    • 我也开始怀疑我的颜色距离函数是否没有找到最相似的颜色(我已经在上面发布了我的颜色距离函数)。我确实看到了其他计算距离的函数,但我很好奇哪个最准确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2019-07-27
    • 2011-05-24
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    相关资源
    最近更新 更多