Pop\Color\Convert::labToRgb PHP Метод

labToRgb() публичный статический Метод

Method to convert a LAB object to an integer RGB object
public static labToRgb ( Lab $lab ) : Rgb
$lab Pop\Color\Space\Lab
Результат Pop\Color\Space\Rgb
    public static function labToRgb(Space\Lab $lab)
    {
        $y = ($lab->getL() + 16) / 116;
        $x = $lab->getA() / 500 + $y;
        $z = $y - $lab->getB() / 200;
        if (pow($y, 3) > 0.008855999999999999) {
            $y = pow($y, 3);
        } else {
            $y = ($y - 16 / 116) / 7.787;
        }
        if (pow($x, 3) > 0.008855999999999999) {
            $x = pow($x, 3);
        } else {
            $x = ($x - 16 / 116) / 7.787;
        }
        if (pow($z, 3) > 0.008855999999999999) {
            $z = pow($z, 3);
        } else {
            $z = ($z - 16 / 116) / 7.787;
        }
        $x = $x * 95.047 / 100;
        $y = $y * 100.0 / 100;
        $z = $z * 108.883 / 100;
        $r = $x * 3.2406 + $y * -1.5372 + $z * -0.4986;
        $g = $x * -0.9689 + $y * 1.8758 + $z * 0.0415;
        $b = $x * 0.0557 + $y * -0.204 + $z * 1.057;
        if ($r > 0.0031308) {
            $r = 1.055 * (pow($r, 1 / 2.4) - 0.055);
        } else {
            $r = 12.92 * $r;
        }
        if ($g > 0.0031308) {
            $g = 1.055 * (pow($g, 1 / 2.4) - 0.055);
        } else {
            $g = 12.92 * $g;
        }
        if ($b > 0.0031308) {
            $b = 1.055 * (pow($b, 1 / 2.4) - 0.055);
        } else {
            $b = 12.92 * $b;
        }
        if ($r > 1) {
            $r -= 1;
        }
        if ($g > 1) {
            $g -= 1;
        }
        if ($b > 1) {
            $b -= 1;
        }
        $r = round($r * 255);
        $g = round($g * 255);
        $b = round($b * 255);
        return new Space\Rgb($r, $g, $b);
    }