Support

Account

Home Forums Front-end Issues Convert hexadecimal value to HSL Reply To: Convert hexadecimal value to HSL

  • This removes the #

    <?php 
    $hex = '#f00';
    $hex = str_replace('#', '', $hex);
    echo $hex;

    So altogether:

    
    <?php 
    $hex = get_field('hex_colour');
    $hex = str_replace('#', '', $hex);
    echo hexToHsl($hex);
    

    The function:

    <?php
    
    function hexToHsl($hex){
        $red = hexdec(substr($hex, 0, 2)) / 255;
        $green = hexdec(substr($hex, 2, 2)) / 255;
        $blue = hexdec(substr($hex, 4, 2)) / 255;
    
        $cmin = min($red, $green, $blue);
        $cmax = max($red, $green, $blue);
        $delta = $cmax - $cmin;
    
        if ($delta == 0) {
            $hue = 0;
        } elseif ($cmax === $red) {
            $hue = (($green - $blue) / $delta);
        } elseif ($cmax === $green) {
            $hue = ($blue - $red) / $delta + 2;
        } else {
            $hue = ($red - $green) / $delta + 4;
        }
    
        $hue = round($hue * 60);
        if ($hue < 0) {
            $hue += 360;
        }
    
        $lightness = (($cmax + $cmin) / 2);
        $saturation = $delta === 0 ? 0 : ($delta / (1 - abs(2 * $lightness - 1)));
        if ($saturation < 0) {
            $saturation += 1;
        }
    
        $lightness = round($lightness*100);
        $saturation = round($saturation*100);
    
         return "hsl(${hue}, ${saturation}%, ${lightness}%)";
    
        //return array($hue, $saturation, $lightness);
        }