问题:是否可以在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));
}
答案 0 :(得分:1)
由于您的色彩空间为standard RGB,因此维基百科文章Luminance (relative)表示您对R,G和B的乘数应为
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;
}