 ## Convert wavelength in nm to RGB

Maybe some day you'll need to convert wavelengthes in nanometers to RGB values.
I just needed it for visualizing emission values of flourescent dyes in a lab information system.
I didn't want to make that by hand, picking e.g. 20 values from the color range to let them stand for everything between them, but wanted to have a proper and (at least approximately) exact solution.

The function below is based on an algorithm developed by Dan Bruton I found in the web.
I just transcribed it to PHP, and it works pretty good.

```
<?php
function wavtorgb(\$w){
\$w = intval(\$w);
if(!\$w) return false;

//color
if(\$w >= 100 AND \$w < 380){
\$r = 0.91;
\$g = 0.77;
\$b = 1.0;

}elseif(\$w >= 380 AND \$w < 440){
\$r = abs(\$w - 440) / (440 - 350);
\$g = 0.0;
\$b = 1.0;

}elseif(\$w >= 440 AND \$w < 490){
\$r = 0.0;
\$g = abs(\$w - 440) / (490 - 440);
\$b = 1.0;

}elseif(\$w >= 490 AND \$w < 510){
\$r = 0.0;
\$g = 1.0;
\$b = abs(\$w - 510) / (510 - 490);

}elseif(\$w >= 510 AND \$w < 580){
\$r = abs(\$w - 510) / (580 - 510);
\$g = 1.0;
\$b = 0.0;

}elseif(\$w >= 580 AND \$w < 645){
\$r = 1.0;
\$g = abs(\$w - 645) / (645 - 580);
\$b = 0.0;

}elseif(\$w >= 645 AND \$w < 780){
\$r = 1.0;
\$g = 0.0;
\$g = 0.0;

}elseif(\$w >= 780 AND \$w < 1000000){
\$r = 1.0;
\$g = 0.31;
\$b = 0.31;

}else{
\$r = 0.0;
\$g = 0.0;
\$b = 0.0;
}

//let the intensity sss fall off near the vision limits
if(\$w >= 380 AND \$w < 420){
\$sss = 0.3 + 0.7*(\$w - 350) / (420 - 350);

}elseif(\$w >= 420 AND \$w <= 700){
\$sss = 1.0;

}elseif(\$w > 700 AND \$w <= 780){
\$sss = 0.3 + 0.7*(780 - \$w) / (780 - 700);

}else{
\$sss = 1.0;
}
\$sss *= 255;

\$r = intval(\$sss * \$r);
\$g = intval(\$sss * \$g);
\$b = intval(\$sss * \$b);

//label
if(\$w >= 100 AND \$w < 380){
\$label = \$w."nm (UV)";

}elseif(\$w >= 380 AND \$w < 780){
\$label = \$w."nm";

}elseif(\$w >= 780 AND \$w < 1000000){
\$label = \$w."nm (IR)";

}else{
return false;
}

\$return = array(\$r, \$g, \$b, \$label);
return \$return;
}
?>
```