欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

给定一个颜色值,如何把它转换成一个深一点的值

程序员文章站 2022-06-02 21:06:48
...
给定一个颜色值,怎么把它转换成一个深一点的值?
a = "#333333"
需要这个函数:把a的色彩变深一点,比如a="#222222"
给定一个颜色值,如何把它转换成一个深一点的值
------解决思路----------------------
$a = "#333333";
$rgb = unpack('C*', pack('H*', substr($a, 1)));
$hsb = call_user_func_array('rgb2hsb', $rgb);
$hsb[2] *= 0.67;
$rgb = call_user_func_array('hsb2rgb', $hsb);
echo '#' . join('', array_map('dechex', $rgb));


function rgb2hsb($rgbR, $rgbG, $rgbB) {
$rgbR &= 255;
$rgbG &= 255;
$rgbB &= 255;
$rgb = array($rgbR, $rgbG, $rgbB );
sort($rgb);
$max = $rgb[2];
$min = $rgb[0];

$hsbB = $max / 255.0;
$hsbS = $max == 0 ? 0 : ($max - $min) / $max;

$hsbH = 0;
if ($max == $rgbR && $rgbG >= $rgbB) {
$hsbH = ($rgbG - $rgbB) * 60 / (($m = $max - $min) ? $m : 1);
} else if ($max == $rgbR && $rgbG $hsbH = ($rgbG - $rgbB) * 60 / ($max - $min) + 360;
} else if ($max == $rgbG) {
$hsbH = ($rgbB - $rgbR) * 60 / ($max - $min) + 120;
} else if ($max == $rgbB) {
$hsbH = ($rgbR - $rgbG) * 60 / ($max - $min) + 240;
}

return array( $hsbH, $hsbS, $hsbB );
}

function hsb2rgb($h, $s, $v) {
$r = $g = $b = 0;
$i = ($h / 60) % 6;
$f = ($h / 60) - $i;
$p = $v * (1 - $s);
$q = $v * (1 - $f * $s);
$t = $v * (1 - (1 - $f) * $s);
switch ($i) {
case 0:
$r = $v;
$g = $t;
$b = $p;
break;
case 1:
$r = $q;
$g = $v;
$b = $p;
break;
case 2:
$r = $p;
$g = $v;
$b = $t;
break;
case 3:
$r = $p;
$g = $q;
$b = $v;
break;
case 4:
$r = $t;
$g = $p;
$b = $v;
break;
case 5:
$r = $v;
$g = $p;
$b = $q;
break;
default:
break;
}
return array( intval($r * 255), intval($g * 255), intval($b * 255) );
}
#222222
给定一个颜色值,如何把它转换成一个深一点的值

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频