本帖最后由 fujun2013 于 2014-09-16 17:13:39 编辑

解决方案 »

  1.   

    直译即可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 / ($max - $min) + 0;
        } 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) {
    //    $h , 0.0f) >= 0 && Float.compare(h, 360.0f) <= 0;
    //    assert Float.compare(s, 0.0f) >= 0 && Float.compare(s, 1.0f) <= 0;
    //    assert Float.compare(v, 0.0f) >= 0 && Float.compare(v, 1.0f) <= 0;
     
        $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) );
    }