Du bist hier: StartPHPFunktionen › RGB und HSB umwandelnDieses Snippet kommentieren

RGB- und HSB-Farben umwandeln

Dieses Codes rechnen RGB und HSB (HSV) und zurück um. Dabei muss beachtet werden, wie die Eingabewerte zu formatieren sind (als (255,255,255) oder (1,1,1)).

function byteToPercent($color) // (255,255,0) -> (1,1,0)
{
    return array(
        round($color[0] / 255.0, 5),
        round($color[1] / 255.0, 5),
        round($color[2] / 255.0, 5)
    );
}
 
function percentToByte($color) // (1,1,0) -> (255,255,0)
{
    return array(
        round($color[0] * 255, 0),
        round($color[1] * 255, 0),
        round($color[2] * 255, 0),
    );
}
 
function rgb2hsv($color) // RGB = ([0...1],[0...1],[0...1])
{
    list($r,$g,$b) = $color;
 
    $v      = max($r, $g, $b);
    $minRGB = min($r, $g, $b);

    $s = ($v == 0) ? 0 : ($v - $minRGB) / $v;

    if ($s == 0) {
        $h = null;
    } else {
        $cr = ($v - $r) / ($v - $minRGB);
        $cg = ($v - $g) / ($v - $minRGB);
        $cb = ($v - $b) / ($v - $minRGB);

        if ($r == $v) $h = $cb - $cg;
        if ($g == $v) $h = 2 + $cr - $cb;
        if ($b == $v) $h = 4 + $cg - $cr;

        $h /= 6;
        if ($h < 0) $h++;
    }

    return array($h, $s, $v);
}
 
function hsv2rgb($color)
{
    list($h,$s,$v) = $color;
 
    $h = ($h - floor($h)) * 360;
    $r = $g = $b = 0;
 
    if ($s == 0) {
        $r = $g = $b = $v;
    } else {
        $h = ($h == 360) ? 0 : ($h / 60);
        $i = floor($h);
        $f = $h - $i;
        $m = $v * (1 - $s);
        $n = $v * (1 - $s * $f);
        $k = $v * (1 - $s * (1 - $f));

        switch ($i) {
            case 0: $r = $v; $g = $k; $b = $m; break;
            case 1: $r = $n; $g = $v; $b = $m; break;
            case 2: $r = $m; $g = $v; $b = $k; break;
            case 3: $r = $m; $g = $n; $b = $v; break;
            case 4: $r = $k; $g = $m; $b = $v; break;
            case 5: $r = $v; $g = $m; $b = $n; break;
        }
    }

    return array($r, $g, $b);
}

Kommentar verfassen

Fehler gefunden? Doofer Code? Ein kleines "Danke!"? Hinterlasse einfach einen Kommentar.

(muss sein)
(muss nicht sein, wird nicht angezeigt)

Dein Kommentar wird erst nach einer manuellen Prüfung angezeigt.