Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PHP RGB dynamische Hintergrundfarbe errechnen

Frage Entwicklung PHP

Mitglied: Midivirus

Midivirus (Level 2) - Jetzt verbinden

06.08.2014, aktualisiert 12:05 Uhr, 1189 Aufrufe, 5 Kommentare, 1 Danke

Guten Morgen Gemeinde,

ich gebe euch mal meinen bisherigen Code vorweg:

01.
function rgb($intPct, $intPctM){ 
02.
	// round(max(0,255-(($intPct-0)*16.1))) 
03.
	$array = array
04.
	0=>array(0,255,0), 		//grün 
05.
	1=>array(15,255,0), 
06.
	2=>array(30,255,0), 
07.
	3=>array(45,255,0), 
08.
// schnipp 
09.
	13=>array(195,255,0), 
10.
	14=>array(210,255,0), 
11.
	15=>array(225,255,0),	//gelb 
12.
	16=>array(240,255,0), 
13.
	17=>array(255,255,0), 
14.
	18=>array(255,240,0), 
15.
	19=>array(255,225,0), 
16.
	20=>array(255,210,0), 
17.
	21=>array(255,195,0), 
18.
// schnipp 
19.
	31=>array(255,45,0), 
20.
	32=>array(255,30,0), 
21.
	33=>array(255,15,0), 
22.
	34=>array(255,0,0),		// rot 
23.
	35=>array(255,0,25), 
24.
	36=>array(255,0,50), 
25.
	37=>array(255,0,75), 
26.
	38=>array(255,0,100), 
27.
	39=>array(255,0,125), 
28.
	40=>array(255,0,150), 
29.
	); 
30.
		 
31.
	return(' style="background-color:rgb('.$array[$intPct][0].','.$array[$intPct][1].','.$array[$intPct][2].')" '); 
32.
}
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:
a7d44500cad50bbbc1def80ca317c34f - Klicke auf das Bild, um es zu vergrößern


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:
bdd7ed115311b9523f9deaddd676dcce - Klicke auf das Bild, um es zu vergrößern
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.
Mitglied: SlainteMhath
LÖSUNG 06.08.2014, aktualisiert um 13:23 Uhr
Moin,

das sollte sich mit einem Dreisatz lösen lassen
Pseudo Code
01.
ArrayElement=(MaximalWert/100) * (länge(array)/100)
Ohne Gewähr - hatte erst einen Kaffee heute

lg,
Slainte
Bitte warten ..
Mitglied: colinardo
LÖSUNG 06.08.2014, aktualisiert um 15:28 Uhr
Moin,
wie @SlainteMhath schon schreibt ist das mit einer einfachen Prozentrechnung erledigt. Hier ein Beispiel:
01.
<?php 
02.
function getColor($current,$max){ 
03.
	$intPct = round(($current / $max) * 100); 
04.
	$r=($intPct<50) ? round(min(255,$intPct*5.1 ))          :255; 
05.
	$g=($intPct>50) ? round(max(0,255-(($intPct-50)*5.1)))  :255; 
06.
	return $r.','.$g.',0'; 
07.
08.
function printArray(){ 
09.
	$arr = array(5,65,44,33,20,50,80); 
10.
	$max = max($arr); 
11.
	for($i = 0; $i < count($arr); $i++){ 
12.
		$out .= '<td style="text-align:center;width:50px;background-color:rgb('.getColor($arr[$i],$max).')">'. $arr[$i].'</td>'; 
13.
14.
	return $out; 
15.
16.
?> 
17.
<!DOCTYPE HTML> 
18.
<html> 
19.
<head> 
20.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
21.
<title> Color</title> 
22.
</head> 
23.
<body> 
24.
<table> 
25.
<tr><?php echo printArray(); ?></tr> 
26.
</table> 
27.
</body> 
28.
</html>
Viel Erfolg
Grüße Uwe
Bitte warten ..
Mitglied: Midivirus
06.08.2014, aktualisiert um 12:06 Uhr
Ich hab es so gelöst:

01.
function rgb($intPct, $intPctM){ 
02.
	$array = array
03.
	0=>array(0,255,0), 		//grün 
04.
	1=>array(15,255,0), 
05.
	2=>array(30,255,0), 
06.
//schnipp 
07.
	13=>array(195,255,0), 
08.
	14=>array(210,255,0), 
09.
	15=>array(225,255,0),	//gelb 
10.
	16=>array(240,255,0), 
11.
	17=>array(255,255,0), 
12.
	18=>array(255,240,0), 
13.
//schnipp 
14.
	32=>array(255,30,0), 
15.
	33=>array(255,15,0), 
16.
	34=>array(255,0,0),		// rot 
17.
//schnipp 
18.
	); 
19.
 
20.
	$intPct = round((count($array)-1)*($intPct/($intPctM/100))/100); 
21.
 
22.
	return('background-color:rgb('.$array[$intPct][0].','.$array[$intPct][1].','.$array[$intPct][2].'); color:black;'); 
23.
}
Bitte warten ..
Mitglied: colinardo
06.08.2014 um 13:15 Uhr
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
Bitte warten ..
Mitglied: Midivirus
06.08.2014, aktualisiert um 13:24 Uhr
... ich vergess das immer wieder
Bitte warten ..
Ähnliche Inhalte
Grafikkarten & Monitore
Wie schliesst man ein RGB Kabel an und wo gibt es sowas noch? (20)

Frage von winIT3264 zum Thema Grafikkarten & Monitore ...

CPU, RAM, Mainboards
Corsair RGB LED Lüfter laut (2)

Frage von uridium69 zum Thema CPU, RAM, Mainboards ...

Exchange Server
gelöst Dynamische Verteilergruppe (9)

Frage von justdan zum Thema Exchange Server ...

PHP
PHP 5.3 nach PHP 5.6 portieren (5)

Frage von nippon-tussi zum Thema PHP ...

Neue Wissensbeiträge
Entwicklung

Exploit Development

Anleitung von burhanudinn123 zum Thema Entwicklung ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(2)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Netzwerkprotokolle
Leiten "dumme" Switches VLAN-Tags mit durch? (19)

Frage von coltseavers zum Thema Netzwerkprotokolle ...

Batch & Shell
Batch zum suchen und verschieben von Verknüpfungen (12)

Frage von zeroblue2005 zum Thema Batch & Shell ...

Windows Server
gelöst Neues KB für W10 1607 und W2K16 wieder mal nicht im WSUS 3.0, hat das noch jemand? (12)

Frage von departure69 zum Thema Windows Server ...

Windows Server
Terminalserver starten willkürlich neu (12)

Frage von thaefliger zum Thema Windows Server ...