我想根据1到100之间的数字显示红色、黄色和绿色之间的颜色。
数字1为绿色,数字100为红色,数字50为黄色。我想创建一个在这些颜色之间形成渐变的效果。
到目前为止,我尝试过:
$r = floor(255 * ($number / 100));
$g = 255 - $r;
它有一定效果,但给出的是棕色和暗色,没有黄色。
这是因为你不应该同时更改两个通道,而是在前半部分提高R,在后半部分降低G。
尝试使用此类函数:
function GreenYellowRed($number) {
$number--; // working with 0-99 will be easier
if ($number < 50) {
// green to yellow
$r = floor(255 * ($number / 50));
$g = 255;
} else {
// yellow to red
$r = 255;
$g = floor(255 * ((50-$number%50) / 50));
}
$b = 0;
return "$r,$g,$b";
}
测试它:
$output = "";
for ($i = 1; $i <= 100; $i++) {
$rgb = GreenYellowRed($i);
$output .= "<div style='background-color: rgb($rgb)'>$rgb</div>";
}
echo $output;
经过一番查找,这些解决方案都不尽人意。如上所述,HSV可能是最好的选择,因为现代浏览器可以很好地渲染颜色。
要了解您正在使用的颜色,请查看此颜色轮:
http://www.colorspire.com/rgb-color-wheel/
我想从蓝色开始,因此我将使用255进行归一化。
function temp_color($temp){
$start = 40;
$end = 85;
$normal = round(255-((($temp - $start)/($end-$start))*255));
$color = "hsl($normal, 100%, 30%);";
$span = "<span style=\"color: $color\">$temp</span>";
return $span;
}