Convert hex color to RGB values in PHP

前端 未结 15 1787
轮回少年
轮回少年 2020-11-30 21:32

What would be a good way to convert hex color values like #ffffff into the single RGB values 255 255 255 using PHP?

相关标签:
15条回答
  • Check out PHP's hexdec() and dechex() functions: http://php.net/manual/en/function.hexdec.php

    Example:

    $value = hexdec('ff'); // $value = 255
    
    0 讨论(0)
  • 2020-11-30 22:27

    For anyone that is interested this is another very simple way of doing it. This example assumes there is exactly 6 characters and no preceding pound sign.

    list($r, $g, $b) = array_map('hexdec', str_split($colorName, 2));
    

    Here is an example the supports 4 different inputs (abc, aabbcc, #abc, #aabbcc):

    list($r, $g, $b) = array_map(
      function ($c) {
        return hexdec(str_pad($c, 2, $c));
      },
      str_split(ltrim($colorName, '#'), strlen($colorName) > 4 ? 2 : 1)
    );
    
    0 讨论(0)
  • 2020-11-30 22:27
    //if u want to convert rgb to hex
    $color='254,125,1';
    $rgbarr=explode(",", $color);
    echo sprintf("#%02x%02x%02x", $rgbarr[0], $rgbarr[1], $rgbarr[2]);
    
    0 讨论(0)
  • 2020-11-30 22:30

    I made a function which also returns alpha if alpha is provided as a second parameter the code is below.

    The function

    function hexToRgb($hex, $alpha = false) {
       $hex      = str_replace('#', '', $hex);
       $length   = strlen($hex);
       $rgb['r'] = hexdec($length == 6 ? substr($hex, 0, 2) : ($length == 3 ? str_repeat(substr($hex, 0, 1), 2) : 0));
       $rgb['g'] = hexdec($length == 6 ? substr($hex, 2, 2) : ($length == 3 ? str_repeat(substr($hex, 1, 1), 2) : 0));
       $rgb['b'] = hexdec($length == 6 ? substr($hex, 4, 2) : ($length == 3 ? str_repeat(substr($hex, 2, 1), 2) : 0));
       if ( $alpha ) {
          $rgb['a'] = $alpha;
       }
       return $rgb;
    }
    

    Example of function responses

    print_r(hexToRgb('#19b698'));
    Array (
       [r] => 25
       [g] => 182
       [b] => 152
    )
    
    print_r(hexToRgb('19b698'));
    Array (
       [r] => 25
       [g] => 182
       [b] => 152
    )
    
    print_r(hexToRgb('#19b698', 1));
    Array (
       [r] => 25
       [g] => 182
       [b] => 152
       [a] => 1
    )
    
    print_r(hexToRgb('#fff'));
    Array (
       [r] => 255
       [g] => 255
       [b] => 255
    )
    

    If you'd like to return the rgb(a) in CSS format just replace the return $rgb; line in the function with return implode(array_keys($rgb)) . '(' . implode(', ', $rgb) . ')';

    0 讨论(0)
  • 2020-11-30 22:30

    You can use the function hexdec(hexStr: String) to get the decimal value of a hexadecimal string.

    See below for an example:

    $split = str_split("ffffff", 2);
    $r = hexdec($split[0]);
    $g = hexdec($split[1]);
    $b = hexdec($split[2]);
    echo "rgb(" . $r . ", " . $g . ", " . $b . ")";
    

    This will print rgb(255, 255, 255)

    0 讨论(0)
  • 2020-11-30 22:30

    try this, it converts its arguments (r, g, b) to hexadecimal html-color string #RRGGBB Arguments are converted to integers and trimmed to 0..255 range

    <?php
    function rgb2html($r, $g=-1, $b=-1)
    {
        if (is_array($r) && sizeof($r) == 3)
            list($r, $g, $b) = $r;
    
        $r = intval($r); $g = intval($g);
        $b = intval($b);
    
        $r = dechex($r<0?0:($r>255?255:$r));
        $g = dechex($g<0?0:($g>255?255:$g));
        $b = dechex($b<0?0:($b>255?255:$b));
    
        $color = (strlen($r) < 2?'0':'').$r;
        $color .= (strlen($g) < 2?'0':'').$g;
        $color .= (strlen($b) < 2?'0':'').$b;
        return '#'.$color;
    }
    ?>
    

    oh and the other way round

    # character in the beginning can be omitted. Function returns array of three integers in range (0..255) or false when it fails to recognize color format.

    <?php
    function html2rgb($color)
    {
        if ($color[0] == '#')
            $color = substr($color, 1);
    
        if (strlen($color) == 6)
            list($r, $g, $b) = array($color[0].$color[1],
                                     $color[2].$color[3],
                                     $color[4].$color[5]);
        elseif (strlen($color) == 3)
            list($r, $g, $b) = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);
        else
            return false;
    
        $r = hexdec($r); $g = hexdec($g); $b = hexdec($b);
    
        return array($r, $g, $b);
    }
    ?>
    
    0 讨论(0)
提交回复
热议问题