1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
function SetBright($color,$bright){
$color=ereg_replace("#","",$color);
$bgr=explode('x',wordwrap($color,2,'x',3));
$color='';
for($i=0;$i<=2;$i++){
$bgr[$i]=hexdec($bgr[$i]);
$bgr[$i]=$bgr[$i]+$bright;
if($bgr[$i]<0) $bgr[$i]=0;
if($bgr[$i]>255) $bgr[$i]=255;
$color.=StrToUpper(substr('0'.dechex($bgr[$i]),-2));
}
return $color;
}
function calculratio($colora,$colorb){
$colora=ereg_replace("#","",$colora);
$colorb=ereg_replace("#","",$colorb);
//convertnio décimal
$Srgb[0][0]=hexdec($colora[0].$colora[1]);
$Srgb[0][1]=hexdec($colora[2].$colora[3]);
$Srgb[0][2]=hexdec($colora[4].$colora[5]);
$Srgb[1][0]=hexdec($colorb[0].$colorb[1]);
$Srgb[1][1]=hexdec($colorb[2].$colorb[3]);
$Srgb[1][2]=hexdec($colorb[4].$colorb[5]);
for ($i=0 ; $i<2 ; $i++) {
for ($j=0 ; $j<3; $j++) {
$x=$Srgb[$i][$j] ;
$Normalized[$i][$j]=$x <=0.03928 ? $x /12.92 : pow((($x+0.055)/1.055),2.4) ;
}
$L[$i]=0.2126*$Normalized[$i][0]+0.7152*$Normalized[$i][1]+0.0722*$Normalized[$i][2] ;
}
if ($L[1] > $L[0]) {
$temp=$L[0] ;
$L[0]=$L[1] ;
$L[1]=$temp ;
}
$diff=((round(($L[0]+0.05)/($L[1]+0.05))*10)/10);
$contra=abs($Srgb[0][0]-$Srgb[1][0])+abs($Srgb[0][1]-$Srgb[1][1])+abs($Srgb[0][2]-$Srgb[1][2]) ;
//echo $contra." : ".$diff. "<br>";
if( $diff>6 && $contra>500)
return $colorb;
else{
if($Srgb[0][0]>125 || $Srgb[0][1]>125 || $Srgb[0][2]>125)
$newcolor=SetBright($colorb,-1);
else
$newcolor=SetBright($colorb,1);
return calculratio($colora,$newcolor);
}
} |
Partager