104 votes

Convertir les couleurs hexagonales en valeurs RVB en PHP

Quel serait le bon moyen de convertir des valeurs de couleur hexagonales comme #ffffff en valeurs RVB simples 255 255 255 en utilisant PHP ?

338voto

John Points 3654

Si vous voulez convertir l'hexagone en rgb, vous pouvez utiliser sscanf :

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

Sortie :

#ff9900 -> 255 153 0

60voto

Niek van der Steen Points 1409

Consultez le site de PHP hexdec() y dechex() fonctions : http://php.net/manual/en/function.hexdec.php

Exemple :

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

49voto

Jake Points 741

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

43voto

arosolino Points 959

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

20voto

RatajS Points 694

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)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X