Преобразование шестнадцатеричного цвета в значения RGB в PHP

Каким образом можно было бы преобразовать значения шестнадцатеричного цвета, такие как #ffffff в одиночные значения RGB 255 255 255 с использованием PHP?

Проверьте функции PHP hexdec () и dechex () http://php.net/manual/en/function.hexdec.php Пример:

 $value = hexdec('ff'); // $value = 255 

Если вы хотите преобразовать hex в rgb, вы можете использовать sscanf :

 <?php $hex = "#ff9900"; list($r, $g, $b) = sscanf($hex, "#%02x%02x%02x"); echo "$hex -> $r $g $b"; ?> 

Вывод:

 #ff9900 -> 255 153 0 

Я сделал функцию, которая также возвращает альфу, если альфа предоставляется в качестве второго параметра, код ниже.

Функция

 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; } 

Пример функциональных ответов

 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 ) 

Если вы хотите вернуть rgb (a) в формате CSS, просто замените return $rgb; строка в функции с return implode(array_keys($rgb)) . '(' . implode(', ', $rgb) . ')'; return implode(array_keys($rgb)) . '(' . implode(', ', $rgb) . ')';

Для любого, кого это интересует, это еще один очень простой способ сделать это. В этом примере предполагается, что существует ровно 6 символов и знак предшествующего фунта.

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

Вот пример: поддерживает 4 разных входа (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)); 

Я поставил ответ @ John и комментарий / идею @ iic вместе в функцию, которая может обрабатывать как обычные цветовые коды шестнадцатеричных цветов, так и сокращенные цветовые коды.

Краткое объяснение:

С scanf я считываю значения r, g и b из шестнадцатеричного цвета в виде строк. Не как шестнадцатеричные значения, как в ответе @ Джона. В случае использования сокращенных цветовых кодов строки r, g и b должны быть удвоены («f» -> «ff» и т. Д.), Прежде чем преобразовывать их в десятичные числа.

 function hex2rgb($hexColor) { $shorthand = (strlen($hexColor) == 4); list($r, $g, $b) = $shorthand? sscanf($hexColor, "#%1s%1s%1s") : sscanf($hexColor, "#%2s%2s%2s"); return [ "r" => hexdec($shorthand? "$r$r" : $r), "g" => hexdec($shorthand? "$g$g" : $g), "b" => hexdec($shorthand? "$b$b" : $b) ]; } 

Преобразование цветового кода HEX в RGB

 $color = '#ffffff'; $hex = str_replace('#','', $color); if(strlen($hex) == 3): $rgbArray['r'] = hexdec(substr($hex,0,1).substr($hex,0,1)); $rgbArray['g'] = hexdec(substr($hex,1,1).substr($hex,1,1)); $rgbArray['b'] = hexdec(substr($hex,2,1).substr($hex,2,1)); else: $rgbArray['r'] = hexdec(substr($hex,0,2)); $rgbArray['g'] = hexdec(substr($hex,2,2)); $rgbArray['b'] = hexdec(substr($hex,4,2)); endif; print_r($rgbArray); 

Вывод

 Array ( [r] => 255 [g] => 255 [b] => 255 ) 

Я нашел здесь эту ссылку – Преобразовать цвет Hex в RGB и RGB в Hex с помощью PHP

Вы можете попробовать этот простой фрагмент кода ниже.

 list($r, $g, $b) = sscanf(#7bde84, "#%02x%02x%02x"); echo $r . "," . $g . "," . $b; 

Это вернет 123,222,132

Мой подход по уходу за шестнадцатеричными цветами с хешем или без него, одиночными значениями или значениями пары:

 function hex2rgb ( $hex_color ) { $values = str_replace( '#', '', $hex_color ); switch ( strlen( $values ) ) { case 3; list( $r, $g, $b ) = sscanf( $values, "%1s%1s%1s" ); return [ hexdec( "$r$r" ), hexdec( "$g$g" ), hexdec( "$b$b" ) ]; case 6; return array_map( 'hexdec', sscanf( $values, "%2s%2s%2s" ) ); default: return false; } } // returns array(255,68,204) var_dump( hex2rgb( '#ff44cc' ) ); var_dump( hex2rgb( 'ff44cc' ) ); var_dump( hex2rgb( '#f4c' ) ); var_dump( hex2rgb( 'f4c' ) ); // returns false var_dump( hex2rgb( '#f4' ) ); var_dump( hex2rgb( 'f489' ) ); 
 //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]); 

попробуйте это, он преобразует свои аргументы (r, g, b) в шестнадцатеричную строку html-color #RRGGBB Аргументы преобразуются в целые числа и обрезаются до 0..255

 <?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; } ?> 

ой и наоборот

# символ в начале может быть опущен. Функция возвращает массив из трех целых чисел в диапазоне (0..255) или false, если не распознает цветовой формат.

 <?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); } ?>