給定一個顏色值,怎麼把它轉換成一個深一點的值?

來源:互聯網
上載者:User
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 < $rgbB) {        $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

感謝!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.