废话不多说,show my code
//RGB转LAB
public function RgbToLab($RED,$GREEN,$BLUE)
{
$x=0.95047;
$y=1;
$z=1.08883;
if ($RED/255>0.04045){
$R=pow(($RED/255+0.055)/1.055,2.4);
}else{
$R=($RED/255)/12.92;
}
if ($GREEN/255>0.04045){
$G=pow(($GREEN/255+0.055)/1.055,2.4);
}else{
$G=($GREEN/255)/12.92;
}
if ($BLUE/255>0.04045){
$b=pow(($BLUE/255+0.055)/1.055,2.4);
}else{
$b=($BLUE/255)/12.92;
}
$X=0.4124*$R+0.3576*$G+0.1805*$b;
$Y=0.2126*$R+0.7152*$G+0.0722*$b;
$Z=0.0193*$R+0.1192*$G+0.9505*$b;
if (($Y/$y)>pow(6/29,3)){
$L=116*pow($Y/$y,1/3)-16;
}else{
$L=116*((1/3)*pow(29/6,2)*($Y/1)+4/29)-16;
}
if(($X/$x)>pow(6/29,3)){
if(($Y/$y)>pow(6/29,3)){
$A=500*(pow($X/$x,1/3)-pow($Y/$y,1/3));
}else{
$A=500*(pow($X/$x,1/3)-((1/3)*pow(29/6,2)*($Y/$y)+4/29));
}
}else{
if(($Y/$y)>pow(6/29,3)){
$A=500*(((1/3)*pow(29/6,2)*($X/$x)+4/29)-pow($Y/$y,1/3));
}else{
$A=500*(((1/3)*pow(29/6,2)*($X/$x)+4/29)-((1/3)*pow(29/6,2)*($Y/$y)+4/29));
}
}
if(($Y/$y)>pow(6/29,3)){
if(($Z/$z)>pow(6/29,3)){
$B=200*(pow($Y/$y,1/3)-pow($Z/$z,1/3));
}else{
$B=200*(pow($Y/$y,1/3)-((1/3)*pow(29/6,2)*($Z/$z)+4/29));
}
}else{
if(($Z/$z)>pow(6/29,3)){
$B=200*(((1/3)*pow(29/6,2)*($Y/$y)+4/29)-pow($Z/$z,1/3));
}else{
$B=200*(((1/3)*pow(29/6,2)*($Y/$y)+4/29)-((1/3)*pow(29/6,2)*($Z/$z)+4/29));
}
}
return ['L'=>$L,'A'=>$A,'B'=>$B];
}
评论 (1)