PHP RGB dynamische Hintergrundfarbe errechnen
Guten Morgen Gemeinde,
ich gebe euch mal meinen bisherigen Code vorweg:
Nachdem ich auf einer anderen Webseite ein Codeschnipsel mit in dieser Art gefunden hatte
Meine Tabelle oben ist nur für den Übergang ... !
Die obige Funktion erzeugt dann eine schöne Farbskala:
Mein Ziel ist es aber, aus einer Reihe von 5 Werten, wird der höchste mit 40 belegt und entsprechend prozentual die anderen angefärbt:
Die Funktion bekommt den aktuellen Wert für die Hintergrundfarbe und den Maximalwert als Orientierung.
Excel kann das wunderbar, bislang fehlte mir aber noch eine nachvollziehbare Funktion hierfür.
Tipps zur Lösungsfindung wäre verdammt cool.
ich gebe euch mal meinen bisherigen Code vorweg:
function rgb($intPct, $intPctM){
// round(max(0,255-(($intPct-0)*16.1)))
$array = array(
0=>array(0,255,0), //grün
1=>array(15,255,0),
2=>array(30,255,0),
3=>array(45,255,0),
// schnipp
13=>array(195,255,0),
14=>array(210,255,0),
15=>array(225,255,0), //gelb
16=>array(240,255,0),
17=>array(255,255,0),
18=>array(255,240,0),
19=>array(255,225,0),
20=>array(255,210,0),
21=>array(255,195,0),
// schnipp
31=>array(255,45,0),
32=>array(255,30,0),
33=>array(255,15,0),
34=>array(255,0,0), // rot
35=>array(255,0,25),
36=>array(255,0,50),
37=>array(255,0,75),
38=>array(255,0,100),
39=>array(255,0,125),
40=>array(255,0,150),
);
return(' style="background-color:rgb('.$array[$intPct].','.$array[$intPct][1].','.$array[$intPct][2].')" ');
}
Nachdem ich auf einer anderen Webseite ein Codeschnipsel mit in dieser Art gefunden hatte
round(max(0,255-(($intPct-0)*16.1)))
ist das okay, aber die Abstände sind ja dynamisch.Meine Tabelle oben ist nur für den Übergang ... !
Die obige Funktion erzeugt dann eine schöne Farbskala:
Mein Ziel ist es aber, aus einer Reihe von 5 Werten, wird der höchste mit 40 belegt und entsprechend prozentual die anderen angefärbt:
Die Funktion bekommt den aktuellen Wert für die Hintergrundfarbe und den Maximalwert als Orientierung.
Excel kann das wunderbar, bislang fehlte mir aber noch eine nachvollziehbare Funktion hierfür.
Tipps zur Lösungsfindung wäre verdammt cool.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 245703
Url: https://administrator.de/contentid/245703
Ausgedruckt am: 22.11.2024 um 05:11 Uhr
5 Kommentare
Neuester Kommentar
Moin,
wie @SlainteMhath schon schreibt ist das mit einer einfachen Prozentrechnung erledigt. Hier ein Beispiel:
Viel Erfolg
Grüße Uwe
wie @SlainteMhath schon schreibt ist das mit einer einfachen Prozentrechnung erledigt. Hier ein Beispiel:
<?php
function getColor($current,$max){
$intPct = round(($current / $max) * 100);
$r=($intPct<50) ? round(min(255,$intPct*5.1 )) :255;
$g=($intPct>50) ? round(max(0,255-(($intPct-50)*5.1))) :255;
return $r.','.$g.',0';
}
function printArray(){
$arr = array(5,65,44,33,20,50,80);
$max = max($arr);
for($i = 0; $i < count($arr); $i++){
$out .= '<td style="text-align:center;width:50px;background-color:rgb('.getColor($arr[$i],$max).')">'. $arr[$i].'</td>';
}
return $out;
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title> Color</title>
</head>
<body>
<table>
<tr><?php echo printArray(); ?></tr>
</table>
</body>
</html>
Grüße Uwe
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.