2015-10-23 16:52

[PHP] 從 RGB 轉換到 HSB

HSB(HSV)通過色相/飽和度/亮度三要素來表達顏色。
  • H(Hue):表示颜色的類型 (例如红色,绿色或者黄色),取值範圍為 0 ~ 360,其中每一个值代表一種顏色
  • S(Saturation):顏色的飽和度從 0 到 1,有时候也稱為纯度 (0 表示灰度圖,1 表示纯的顏色)
  • B(Brightness or Value):顏色的明亮程度從 0 到 1 (0 表示黑色,1 表示特定飽和度的顏色)

  1. function rgb2hsb($rgb) { 
  2.    $red   = max(0, min(255, $rgb['red'])); 
  3.    $green = max(0, min(255, $rgb['green'])); 
  4.    $blue  = max(0, min(255, $rgb['blue'])); 
  5.  
  6.    $max = max($red, $green, $blue); 
  7.    $min = min($red, $green, $blue); 
  8.    $delta = $max - $min; 
  9.  
  10.    $b = $max / 255; 
  11.    $s = $max == 0 ? 0 : $delta / $max; 
  12.  
  13.    $h = 0; 
  14.    if ($delta == 0) { 
  15.        $h = 0; 
  16.    } else if ($max == $red && $green >= $blue) { 
  17.        $h = 0   + 60 * ($green - $blue) / $delta; 
  18.    } else if ($max == $red && $green < $blue) { 
  19.        $h = 360 + 60 * ($green - $blue) / $delta; 
  20.    } else if ($max == $green) { 
  21.        $h = 120 + 60 * ($blue - $red) / $delta; 
  22.    } else if ($max == $blue) { 
  23.        $h = 240 + 60 * ($red - $green) / $delta; 
  24.    } 
  25.  
  26.    return array('hue' => fmod($h, 360), 'saturation' => $s, 'brightness' => $b); 
  27. } 
  28.  
  29.  
  30.  
  31. function hsb2rgb($hsb) { 
  32.    $h = $hsb['hue']; 
  33.    $s = max(0, min(1, $hsb['saturation'])); 
  34.    $b = max(0, min(1, $hsb['brightness'])); 
  35.  
  36.    $h = fmod($h, 360); 
  37.    if($h < 0){ $h += 360; } 
  38.  
  39.    $i = ($h / 60) % 6; 
  40.    $f = ($h / 60) - $i; 
  41.    $p = $b * (1 - $s); 
  42.    $q = $b * (1 - $f * $s); 
  43.    $t = $b * (1 - (1 - $f) * $s); 
  44.  
  45.    $p = intval(round(255 * $p));   
  46.    $q = intval(round(255 * $q)); 
  47.    $t = intval(round(255 * $t)); 
  48.    $b = intval(round(255 * $bri)); 
  49.  
  50.    switch ($i) { 
  51.        case 0: return array('red' => $b, 'green' => $t, 'blue' => $p); 
  52.        case 1: return array('red' => $q, 'green' => $b, 'blue' => $p); 
  53.        case 2: return array('red' => $p, 'green' => $b, 'blue' => $t); 
  54.        case 3: return array('red' => $p, 'green' => $q, 'blue' => $b); 
  55.        case 4: return array('red' => $t, 'green' => $p, 'blue' => $b); 
  56.        case 5: return array('red' => $b, 'green' => $p, 'blue' => $q); 
  57.        default: return array('red' => 0, 'green' => 0, 'blue' => 0); 
  58.    } 
  59. } 
2015-10-23 16:44

[PHP] 從 Hex 轉換到 RGB

  1. function hex2rgb($hex) { 
  2.    list($r, $g, $b) = sscanf($hex, "%02x%02x%02x"); 
  3.    return array('red' => $r, 'green' => $g, 'blue' => $b); 
  4. } 
  5.  
  6. function rgb2hex($rgb) { 
  7.    return sprintf("%02x%02x%02x", $rgb['red'], $rgb['green'], $rgb['blue']); 
  8. }