2017-01-12 2 views
1

In PHP habe ich eine Liste mit Werten von 0 bis 1 und alles dazwischen. Ich möchte jedem Wert seine eigene Farbe geben.PHP - Erzeuge Farbe von Grün -> Schwarz -> Rot

Ich möchte 0 grün, 0,5 schwarz und 1 wird rot sein. Ein Wert wie 0.1 sollte immer noch grün sein, beginnt aber etwas zu schwarz zu werden. Ein Wert wie 0.6 ist schwarz mit einem kleinen Farbton in Richtung Rot.

Ich habe versucht, von RGB-Methode: Generate colors between red and green for a power meter?

$R = (255 * $percentage)/100; 
$G = (255 * (100 - $percentage))/100 ; 
$B = 0; 

Aber das schafft eine Farbe direkt zwischen grün und rot, und ich kann in der Mitte nicht schwarz verwenden.

habe ich versucht, die HSL zu RGB aus: HSL to RGB color conversion

/** 
* Converts an HSL color value to RGB. Conversion formula 
* adapted from http://en.wikipedia.org/wiki/HSL_color_space. 
* Assumes h, s, and l are contained in the set [0, 1] and 
* returns r, g, and b in the set [0, 255]. 
* 
* @param {number} h  The hue 
* @param {number} s  The saturation 
* @param {number} l  The lightness 
* @return {Array}   The RGB representation 
*/ 
function hslToRgb(h, s, l){ 
    var r, g, b; 

    if(s == 0){ 
     r = g = b = l; // achromatic 
    }else{ 
     var hue2rgb = function hue2rgb(p, q, t){ 
      if(t < 0) t += 1; 
      if(t > 1) t -= 1; 
      if(t < 1/6) return p + (q - p) * 6 * t; 
      if(t < 1/2) return q; 
      if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; 
      return p; 
     } 

     var q = l < 0.5 ? l * (1 + s) : l + s - l * s; 
     var p = 2 * l - q; 
     r = hue2rgb(p, q, h + 1/3); 
     g = hue2rgb(p, q, h); 
     b = hue2rgb(p, q, h - 1/3); 
    } 

    return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; 
} 

Aber das schafft eine Farbe von grün bis rot bis weiß. Ich möchte, dass es von Grün zu Schwarz zu Rot wechselt. Gibt es das überhaupt, kann ich das schaffen?

+1

Sie haben Javascript-Code für eine mit PHP getaggte Frage gepostet. Sind Sie sicher, dass Sie nicht Javascript verwenden, um dies zu tun? – hRdCoder

+0

Oh ja, tut mir leid. Ich habe es nur in PHP konvertiert, den gleichen Code, nur die Variablen sind jetzt für PHP. – DijkeMark

Antwort

1

Etwas so einfach wie das sollte es tun:

$R = 0; 
$G = 0; 
$B = 0; 

// 255 ÷ 50 = 5.1 
if($percentage > 50) { 
    $R = 5.1 * ($percentage - 50); 
} 
elseif($percentage < 50) { 
    $G = 255 - (5.1 * $percentage); 
} 

EDIT

Beachten Sie, dass die elseif/else if anders geschrieben werden, wenn Sie Javascript oder PHP verwenden. Das aktuelle Beispiel würde für PHP funktionieren, da Ihre Frage markiert wurde.

+0

Ich muss mich nur etwas anpassen, um meinen Bedürfnissen besser gerecht zu werden, aber diese Idee funktioniert wirklich. Vielen Dank! Ich dachte viel zu schwierig. – DijkeMark

+0

Mein Vergnügen! :) –

Verwandte Themen