Reinhard: LESS luma Funktion

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

  1. Tach,

    Kann mir jemand sagen, wer hier was falsch macht?

    Das Beispiel auf der LESS-Seite ist falsch; ich vermute mal, es wurde nicht geändert, als sich die luma-Funktion änderte, denn die luminance-Funktion (also luma wie vor Version 1.7) liefert den Wert #c9c9c9.

    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.

    http://codepen.io/anon/pen/dGxvae liefert #aeaeae; der Rest ist ein Rundungsunterschied.

    mfg
    Woodfighter

    1. Hey,

      Kann mir jemand sagen, wer hier was falsch macht?

      Das Beispiel auf der LESS-Seite ist falsch; ich vermute mal, es wurde nicht geändert, als sich die luma-Funktion änderte, denn die luminance-Funktion (also luma wie vor Version 1.7) liefert den Wert #c9c9c9.

      Alles klar, danke!

      Reinhard