我似乎无法弄清楚这一点。我有一组缩放的值(0 ... 1),需要将它们与颜色关联。最高(1)为红色,最低(0)为绿色。
我似乎找不到如何获得介于0和1之间的值的红色和绿色之间的RGB颜色。
这是我将用于缩放值的缩放函数:
function scale_value($value, $srcmin, $srcmax, $destmin = 0, $destmax = 1)
{
# How Far In Source Range Are We
$pos = (($value - $srcmin) / ($srcmax - $srcmin));
return ($pos * ($destmax - $destmin)) + $destmin;
}
我认为将它们从0缩放到1将使下一个我正在苦苦挣扎的部分容易得多。
这是我想出的一个非常糟糕的尝试,失败非常严重。
function make_color($value)
{
$red = $value > 0.5
? (1 - 2 * ($value - 0.5) / 1)
: 1;
$green = $value > 0.5
? 1
: 2 * ($value / 1);
$blue = 0;
return "rgb($red,$green,$blue)";
}
有没有人有使用PHP确定用于1到0之间的值的颜色的经验?
找到了解决方案,将此处发布的JS实现的解决方案转换为PHP,并将Red转换为Green极性,使Red高,Green低。
看起来像这样:
/**
* @param $value
* @param integer|float $min
* @param integer|float $max
* @return string
*/
function make_color($value, $min = 0, $max = .5)
{
$ratio = $value;
if ($min > 0 || $max < 1) {
if ($value < $min) {
$ratio = 1;
} else if ($value > $max) {
$ratio = 0;
} else {
$range = $min - $max;
$ratio = ($value - $max) / $range;
}
}
$hue = ($ratio * 1.2) / 3.60;
$rgb = hsl_to_rgb($hue, 1, .5);
$r = round($rgb['r'], 0);
$g = round($rgb['g'], 0);
$b = round($rgb['b'], 0);
return "rgb($r,$g,$b)";
}
这也依赖于我在本文中找到的HSL到RGB转换器。最终给我一个不错的结果:
谢谢您的帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句