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);
}