viceversa online hexadecimales hexadecimal colores color php colors hex rgb

online - Conversión de color hexadecimal a valores RGB en PHP



hexadecimal color (11)

Consulte las hexdec() de hexdec() y dechex() PHP: http://php.net/manual/en/function.hexdec.php

Ejemplo:

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

¿Cuál sería una buena manera de convertir valores de color hexadecimales como #ffffff en los valores RGB únicos 255 255 255 usando PHP?


He puesto juntos la respuesta de @ John y el comentario / idea de @ iic en una función que puede manejar ambos, los códigos de color hexadecimal habituales y los códigos de color abreviados.

Una breve explicación:

Con scanf , leo los valores r, gy b del color hexadecimal como cadenas. No como valores hexadecimales como en la respuesta de @John. En caso de utilizar códigos de color abreviados, las cadenas r, g y b tienen que duplicarse ("f" -> "ff", etc.) antes de convertirlas a decimales.

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


Hice una función que también devuelve alfa si se proporciona alfa como un segundo parámetro, el código está debajo.

La función

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

Ejemplo de respuestas de funciones

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 )

Si desea devolver el rgb (a) en formato CSS, simplemente reemplace el return $rgb; línea en la función con return implode(array_keys($rgb)) . ''('' . implode('', '', $rgb) . '')''; return implode(array_keys($rgb)) . ''('' . implode('', '', $rgb) . '')'';


Mi enfoque para cuidar los colores hexadecimales con o sin hash, valores únicos o valores de pares:

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


Para cualquiera que esté interesado, esta es otra forma muy simple de hacerlo. Este ejemplo supone que hay exactamente 6 caracteres y ningún signo de libra anterior.

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

Aquí hay un ejemplo que admite 4 entradas diferentes (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));


Puede usar la función hexdec(hexStr: String) para obtener el valor decimal de una cadena hexadecimal.

Vea abajo para un ejemplo:

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

Esto imprimirá rgb(255, 255, 255)


Puedes probar esta simple pieza de código a continuación.

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'' ) );

Esto devolverá 123,222,132


Si quiere convertir hex a rgb, puede usar sscanf :

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

Salida:

#ff9900 -> 255 153 0


intente esto, convierte sus argumentos (r, g, b) a hexadecimal cadena html-color #RRGGBB Los argumentos se convierten en enteros y se recortan a 0..255 rango

<?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 y al revés

# personaje al principio se puede omitir. La función devuelve un conjunto de tres enteros en el rango (0..255) o falso cuando no reconoce el formato de color.

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


Convertir código de color HEX en 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);

Salida

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

He encontrado esta referencia aquí - Convertir Color Hex a RGB y RGB a Hex usando PHP


//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]);