Quel serait le bon moyen de convertir des valeurs de couleur hexagonales comme #ffffff
en valeurs RVB simples 255 255 255
en utilisant PHP ?
Réponses
Trop de publicités?Consultez le site de PHP hexdec()
y dechex()
fonctions : http://php.net/manual/en/function.hexdec.php
Exemple :
$value = hexdec('ff'); // $value = 255
J'ai créé une fonction qui renvoie également alpha si alpha est fourni comme second paramètre ; le code est ci-dessous.
La fonction
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;
}
Exemple de réponses aux fonctions
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 vous souhaitez renvoyer le rgb(a) au format CSS, remplacez simplement l'élément return $rgb;
dans la fonction avec return implode(array_keys($rgb)) . '(' . implode(', ', $rgb) . ')';
Pour ceux que cela intéresse, voici une autre façon très simple de procéder. Cet exemple suppose qu'il y a exactement 6 caractères et qu'aucun signe dièse ne précède.
list($r, $g, $b) = array_map('hexdec', str_split($colorName, 2));
Voici un exemple qui prend en charge 4 entrées différentes (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)
);
Vous pouvez utiliser la fonction hexdec(hexStr: String)
pour obtenir la valeur décimale d'une chaîne hexadécimale.
Voir ci-dessous pour un exemple :
$split = str_split("ffffff", 2);
$r = hexdec($split[0]);
$g = hexdec($split[1]);
$b = hexdec($split[2]);
echo "rgb(" . $r . ", " . $g . ", " . $b . ")";
Ceci imprimera rgb(255, 255, 255)
- Réponses précédentes
- Plus de réponses