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