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

php中文网
发布: 2016-06-13 12:07:40
原创
1090人浏览过

给定一个颜色值,怎么把它转换成一个深一点的值?
a = "#333333"
需要这个函数:把a的色彩变深一点,比如a="#222222"

------解决思路----------------------

$a = "#333333";<br />$rgb = unpack('C*', pack('H*', substr($a, 1)));<br />$hsb = call_user_func_array('rgb2hsb', $rgb);<br />$hsb[2] *= 0.67;<br />$rgb = call_user_func_array('hsb2rgb', $hsb);<br />echo '#' . join('', array_map('dechex', $rgb));<br /><br /><br />function rgb2hsb($rgbR, $rgbG, $rgbB) {<br />    $rgbR &= 255;<br />    $rgbG &= 255;<br />    $rgbB &= 255;<br />    $rgb = array($rgbR, $rgbG, $rgbB );<br />    sort($rgb);<br />    $max = $rgb[2];<br />    $min = $rgb[0];<br /> <br />    $hsbB = $max / 255.0;<br />    $hsbS = $max == 0 ? 0 : ($max - $min) / $max;<br /> <br />    $hsbH = 0;<br />    if ($max == $rgbR && $rgbG >= $rgbB) {<br />        $hsbH = ($rgbG - $rgbB) * 60 / (($m = $max - $min) ? $m : 1);<br />    } else if ($max == $rgbR && $rgbG < $rgbB) {<br />        $hsbH = ($rgbG - $rgbB) * 60 / ($max - $min) + 360;<br />    } else if ($max == $rgbG) {<br />        $hsbH = ($rgbB - $rgbR) * 60 / ($max - $min) + 120;<br />    } else if ($max == $rgbB) {<br />        $hsbH = ($rgbR - $rgbG) * 60 / ($max - $min) + 240;<br />    }<br /> <br />    return array( $hsbH, $hsbS, $hsbB );<br />}<br /> <br />function hsb2rgb($h, $s, $v) {<br />    $r = $g = $b = 0;<br />    $i = ($h / 60) % 6;<br />    $f = ($h / 60) - $i;<br />    $p = $v * (1 - $s);<br />    $q = $v * (1 - $f * $s);<br />    $t = $v * (1 - (1 - $f) * $s);<br />    switch ($i) {<br />    case 0:<br />        $r = $v;<br />        $g = $t;<br />        $b = $p;<br />        break;<br />    case 1:<br />        $r = $q;<br />        $g = $v;<br />        $b = $p;<br />        break;<br />    case 2:<br />        $r = $p;<br />        $g = $v;<br />        $b = $t;<br />        break;<br />    case 3:<br />        $r = $p;<br />        $g = $q;<br />        $b = $v;<br />        break;<br />    case 4:<br />        $r = $t;<br />        $g = $p;<br />        $b = $v;<br />        break;<br />    case 5:<br />        $r = $v;<br />        $g = $p;<br />        $b = $q;<br />        break;<br />    default:<br />        break;<br />    }<br />    return array( intval($r * 255), intval($g * 255), intval($b * 255) );<br />}<br />
登录后复制
#222222

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号