Reinhard: LESS luma Funktion

Beitrag lesen

Hey,

Ich bin gestern in LESS auf die luma Funktion gestoßen und wollte sie mal mit JavaScript nachbauen. Das Beispiel liefert für luma(rgb(100, 200, 30)) den Wert 44% – den Wert bekomme ich auch raus. Mein Problem liegt hier bei greyscale bei dem Vergleich mit luma:
@c: luma(hsl(90, 90%, 50%));
color: rgb(@c, @c, @c);
Output: #cacaca
ca ist im Dezimalsystem 202, was darauf hindeutet, dass luma 79.2% zurückgegeben hat. Meine Version von luma liefert allerdings 68% (==> 173) womit ich auf #adadad komme und da frage ich mich, was da falsch läuft.

function luma(str) {
    var c = toRgb(str),
        sr = c[0] / 255,
        sg = c[1] / 255,
        sb = c[2] / 255,
        r = (sr <= 0.03928) ? sr / 12.92 : Math.pow((sr + 0.055) / 1.055, 2.4),
        g = (sg <= 0.03928) ? sg / 12.92 : Math.pow((sg + 0.055) / 1.055, 2.4),
        b = (sb <= 0.03928) ? sb / 12.92 : Math.pow((sb + 0.055) / 1.055, 2.4),
        l = (0.2126 * r + 0.7152 * g + 0.0722 * b) * 100;
    return l;
}

toRgb(str) konvertiert den Farbcode-String nach rgb und liefert die 3 rgb-Werte in einem Array zurück.
Die Formel ist von der bei luma verlinkten Seite.

Kann mir jemand sagen, wer hier was falsch macht?

Reinhard

akzeptierte Antworten