DevToolBoxGRATUIT
Blog

Convertisseur de Couleurs : RGB, HEX, HSL Guide Complet avec Exemples de Code

14 min de lecturepar DevToolBox

Que vous construisiez un systeme de design, debogniez du CSS ou convertissiez une maquette en code, un convertisseur de couleurs fiable est l'un des outils les plus utilises. Ce guide complet explique chaque modele de couleur majeur, les formules mathematiques, des exemples de code en JavaScript, Python et Bash, ainsi que les fonctionnalites CSS modernes comme oklch() et color-mix().

Essayez notre convertisseur de couleurs gratuit en ligne.

Comprendre les modeles de couleur : RGB, HEX, HSL, HSV et CMYK

RGB (Rouge, Vert, Bleu) est le modele de couleur fondamental pour les ecrans. Chaque pixel melange la lumiere rouge, verte et bleue a des intensites de 0 a 255. RGB est un modele de couleur additif : le melange des trois canaux au maximum produit du blanc.

HEX (Hexadecimal) est la notation de couleur la plus courante sur le web. C'est une representation compacte des valeurs RGB en base 16. #FF5733 correspond a rgb(255, 87, 51). Les codes HEX peuvent etre en 3, 6 ou 8 chiffres.

HSL (Teinte, Saturation, Luminosite) est concu pour etre plus intuitif. La teinte est un degre (0-360), la saturation et la luminosite sont des pourcentages. HSL facilite la creation de variantes plus claires ou plus sombres.

HSV/HSB (Teinte, Saturation, Valeur) est le modele utilise par la plupart des selecteurs de couleurs, y compris Photoshop et Figma. Il partage la roue de teinte avec HSL mais remplace la luminosite par la valeur.

CMYK (Cyan, Magenta, Jaune, Noir) est un modele soustractif pour l'impression. Les encres absorbent la lumiere. CMYK est essentiel pour la generation de PDF et la preparation de fichiers d'impression.

Tableau comparatif des modeles de couleur

Le tableau suivant resume les proprietes cles de chaque modele :

ModelFormatRangeUse CaseCSS SupportHuman-Readable
RGBrgb(R, G, B)0-255 per channelScreen display, Canvas, WebGLYesLow
HEX#RRGGBB00-FF per channelCSS, design tools, tokensYesLow
HSLhsl(H, S%, L%)H: 0-360, S/L: 0-100%Theming, shade generationYesHigh
HSV/HSBhsv(H, S%, V%)H: 0-360, S/V: 0-100%Color pickers (Photoshop, Figma)NoHigh
CMYKcmyk(C%, M%, Y%, K%)0-100% per channelPrint, PDF generationNoMedium
OKLCHoklch(L C H)L: 0-1, C: 0-0.4, H: 0-360Modern CSS, wide gamutYesHigh

Comment fonctionne la conversion de couleurs

Chaque convertisseur de couleurs implemente des formules mathematiques bien connues. Comprendre ces formules aide a deboguer les cas limites.

HEX vers RGB : Un code hex comme #FF5733 est compose de trois paires hexadecimales. Parsez chaque paire independamment pour obtenir les valeurs RGB.

RGB vers HEX : Convertissez chaque valeur de canal (0-255) en chaine hexadecimale a deux chiffres et concatenez avec un prefixe #.

RGB vers HSL : Normalisez R, G, B dans la plage 0-1, trouvez Cmax et Cmin, calculez le delta, la luminosite, la saturation et la teinte.

HSL vers HEX : Convertissez d'abord HSL en RGB, puis chaque canal RGB en hexadecimal.

RGB vers HSV : Le calcul de la teinte est identique a RGB vers HSL. Valeur = Cmax. Saturation = delta / Cmax.

HSL vers HSV et vice versa : Les deux partagent la teinte mais la conversion entre saturation et luminosite/valeur necessite des formules specifiques.

Exemples de code de conversion de couleurs

JavaScript / CSS conversion de couleurs

JavaScript ne fournit pas de convertisseur integre, mais les fonctions de couleur CSS et le parsing simple rendent les conversions directes :

// ===== HEX to RGB =====
function hexToRgb(hex) {
  const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
  return result ? {
    r: parseInt(result[1], 16),
    g: parseInt(result[2], 16),
    b: parseInt(result[3], 16)
  } : null;
}
hexToRgb('#FF5733'); // { r: 255, g: 87, b: 51 }

// ===== RGB to HEX =====
function rgbToHex(r, g, b) {
  return '#' + [r, g, b]
    .map(x => x.toString(16).padStart(2, '0'))
    .join('');
}
rgbToHex(255, 87, 51); // "#ff5733"

// ===== RGB to HSL =====
function rgbToHsl(r, g, b) {
  r /= 255; g /= 255; b /= 255;
  const max = Math.max(r, g, b), min = Math.min(r, g, b);
  const l = (max + min) / 2;
  if (max === min) return { h: 0, s: 0, l: Math.round(l * 100) };
  const d = max - min;
  const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
  let h = 0;
  switch (max) {
    case r: h = ((g - b) / d + (g < b ? 6 : 0)) / 6; break;
    case g: h = ((b - r) / d + 2) / 6; break;
    case b: h = ((r - g) / d + 4) / 6; break;
  }
  return {
    h: Math.round(h * 360),
    s: Math.round(s * 100),
    l: Math.round(l * 100)
  };
}
rgbToHsl(255, 87, 51); // { h: 11, s: 100, l: 60 }

// ===== HSL to RGB =====
function hslToRgb(h, s, l) {
  s /= 100; l /= 100;
  const c = (1 - Math.abs(2 * l - 1)) * s;
  const x = c * (1 - Math.abs((h / 60) % 2 - 1));
  const m = l - c / 2;
  let r = 0, g = 0, b = 0;
  if (h < 60)       { r = c; g = x; b = 0; }
  else if (h < 120) { r = x; g = c; b = 0; }
  else if (h < 180) { r = 0; g = c; b = x; }
  else if (h < 240) { r = 0; g = x; b = c; }
  else if (h < 300) { r = x; g = 0; b = c; }
  else              { r = c; g = 0; b = x; }
  return {
    r: Math.round((r + m) * 255),
    g: Math.round((g + m) * 255),
    b: Math.round((b + m) * 255)
  };
}
hslToRgb(11, 100, 60); // { r: 255, g: 87, b: 51 }

// ===== CSS native color parsing (modern browsers) =====
// Use CSS.supports() and getComputedStyle for runtime conversion
const el = document.createElement('div');
el.style.color = 'hsl(14 100% 60%)';
document.body.appendChild(el);
const rgb = getComputedStyle(el).color;
// "rgb(255, 87, 51)" - browser converts any format to RGB
document.body.removeChild(el);

Python conversion de couleurs

Python inclut colorsys pour les conversions HSL/HSV, et des bibliotheques comme Pillow et matplotlib :

import colorsys

# ===== RGB to HSL (colorsys uses HLS order) =====
r, g, b = 255, 87, 51
r_norm, g_norm, b_norm = r / 255, g / 255, b / 255
h, l, s = colorsys.rgb_to_hls(r_norm, g_norm, b_norm)
print(f"HSL: ({h*360:.0f}, {s*100:.0f}%, {l*100:.0f}%)")
# HSL: (11, 100%, 60%)

# ===== HSL to RGB =====
r2, g2, b2 = colorsys.hls_to_rgb(h, l, s)
print(f"RGB: ({r2*255:.0f}, {g2*255:.0f}, {b2*255:.0f})")
# RGB: (255, 87, 51)

# ===== RGB to HSV =====
h_hsv, s_hsv, v_hsv = colorsys.rgb_to_hsv(r_norm, g_norm, b_norm)
print(f"HSV: ({h_hsv*360:.0f}, {s_hsv*100:.0f}%, {v_hsv*100:.0f}%)")
# HSV: (11, 80%, 100%)

# ===== HEX to RGB =====
def hex_to_rgb(hex_color):
    hex_color = hex_color.lstrip('#')
    return tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4))

print(hex_to_rgb("#FF5733"))  # (255, 87, 51)

# ===== RGB to HEX =====
def rgb_to_hex(r, g, b):
    return f"#{r:02x}{g:02x}{b:02x}"

print(rgb_to_hex(255, 87, 51))  # #ff5733

# ===== Using matplotlib colors =====
import matplotlib.colors as mcolors
rgb_tuple = mcolors.to_rgb('#FF5733')     # (1.0, 0.341, 0.2)
hex_value = mcolors.to_hex((1.0, 0.341, 0.2))  # '#ff5733'
rgba = mcolors.to_rgba('steelblue', alpha=0.5)

# ===== Using Pillow/PIL for image colors =====
from PIL import Image
img = Image.new('RGB', (1, 1), (255, 87, 51))
pixel = img.getpixel((0, 0))  # (255, 87, 51)
img_hsv = img.convert('HSV')   # Convert to HSV color space

Bash / CLI conversion de couleurs

Les outils en ligne de commande comme printf et ImageMagick peuvent gerer les conversions de couleurs basiques :

# ===== HEX to RGB using printf =====
hex="FF5733"
printf "RGB: %d, %d, %d\n" 0x${hex:0:2} 0x${hex:2:2} 0x${hex:4:2}
# RGB: 255, 87, 51

# ===== RGB to HEX using printf =====
r=255 g=87 b=51
printf "#%02x%02x%02x\n" $r $g $b
# #ff5733

# ===== ImageMagick color conversion =====
# Convert HEX to RGB
magick convert xc:"#FF5733" -format "%[fx:int(255*r)],%[fx:int(255*g)],%[fx:int(255*b)]" info:
# 255,87,51

# Get color info in multiple formats
magick convert xc:"#FF5733" -colorspace HSL -format "HSL: %[fx:r*360],%[fx:g*100]%%,%[fx:b*100]%%" info:

# ===== Convert named color to HEX =====
magick convert xc:"tomato" -format "#%02[hex:r]%02[hex:g]%02[hex:b]" info:
# #FF6347

# ===== Batch convert colors from file =====
# colors.txt: one hex color per line
while IFS= read -r color; do
  printf "%s -> RGB: %d, %d, %d\n" "$color" \
    0x${color:1:2} 0x${color:3:2} 0x${color:5:2}
done < colors.txt

Fonctionnalites CSS modernes de couleur

Le CSS moderne prend en charge les espaces de couleur perceptuellement uniformes, les couleurs a gamut etendu et les fonctions de manipulation de couleurs :

/* ===== Modern CSS color syntax (no commas) ===== */
.element {
  /* RGB - modern space-separated */
  color: rgb(255 87 51);
  color: rgb(255 87 51 / 0.5);  /* with alpha */

  /* HSL - modern space-separated */
  background: hsl(14 100% 60%);
  background: hsl(14 100% 60% / 0.8);

  /* HWB - Hue, Whiteness, Blackness */
  border-color: hwb(14 0% 0%);        /* pure orange */
  border-color: hwb(14 20% 10%);      /* muted orange */
}

/* ===== OKLCH - perceptually uniform ===== */
.brand {
  --brand-primary: oklch(0.65 0.25 29);       /* vivid red-orange */
  --brand-light:   oklch(0.85 0.12 29);       /* light variant */
  --brand-dark:    oklch(0.45 0.20 29);       /* dark variant */
  /* Same hue, predictable lightness changes */
}

/* ===== color-mix() - blend colors ===== */
.mixed {
  background: color-mix(in oklch, #FF5733 70%, #3366FF);
  border: 1px solid color-mix(in srgb, currentColor 40%, transparent);
}

/* ===== Relative color syntax ===== */
.derived {
  --base: #FF5733;
  /* Lighten by increasing L in oklch */
  color: oklch(from var(--base) calc(l + 0.2) c h);
  /* Desaturate by reducing chroma */
  background: oklch(from var(--base) l calc(c * 0.5) h);
  /* Shift hue by 180 degrees (complementary) */
  border-color: hsl(from var(--base) calc(h + 180) s l);
}

/* ===== Wide gamut P3 colors ===== */
@supports (color: color(display-p3 1 0 0)) {
  .vivid {
    color: color(display-p3 1 0.3 0.1); /* more vivid than sRGB */
  }
}

/* ===== Dark mode with light-dark() ===== */
:root {
  color-scheme: light dark;
  --text: light-dark(#1a1a1a, #e5e5e5);
  --surface: light-dark(#ffffff, #121212);
}

/* ===== CSS custom properties for theming ===== */
:root {
  --color-primary-h: 14;
  --color-primary-s: 100%;
  --color-primary-l: 60%;
  --color-primary: hsl(
    var(--color-primary-h)
    var(--color-primary-s)
    var(--color-primary-l)
  );
  --color-primary-hover: hsl(
    var(--color-primary-h)
    var(--color-primary-s)
    calc(var(--color-primary-l) - 10%)
  );
}

Fonctions CSS de couleur en profondeur

Le CSS moderne offre un riche ensemble de fonctions de couleur. rgb() accepte la syntaxe separee par des espaces. hwb() (Teinte, Blancheur, Noirceur) est une alternative plus intuitive.

oklch() represente une avancee pour les couleurs web. Base sur l'espace Oklab, il garantit que les couleurs de meme luminosite apparaissent vraiment egalement lumineuses. OKLCH debloque aussi le gamut P3.

color-mix() melange deux couleurs dans n'importe quel espace. La syntaxe de couleur relative derive de nouvelles couleurs a partir de couleurs existantes.

Autres valeurs utiles : currentColor, transparent, les proprietes personnalisees CSS pour le theming, et light-dark() pour la selection automatique selon le schema de couleurs.

Accessibilite des couleurs et contraste

Les ratios de contraste WCAG sont la base du design accessible. AA exige un ratio de 4.5:1 pour le texte normal et 3:1 pour le grand texte. AAA exige 7:1 et 4.5:1 respectivement.

Environ 8% des hommes ont une forme de deficience de la vision des couleurs. Ne comptez jamais sur la couleur seule pour transmettre des informations. Evitez les combinaisons rouge/vert et bleu/violet.

Construisez des palettes accessibles en utilisant OKLCH pour une generation de teintes perceptuellement uniforme. Testez chaque combinaison premier plan/arriere-plan.

Meilleures pratiques de couleur pour les developpeurs

Definissez votre palette comme des jetons de design mappes a des proprietes CSS personnalisees. Utilisez des noms semantiques comme --color-text-primary.

Le mode sombre ne devrait pas etre une simple inversion de luminosite. Concevez-le comme un theme separe avec sa propre palette.

Adoptez une convention de nommage pour votre echelle de couleurs et mappez-la a des roles semantiques. Ne jamais utiliser de valeurs HEX brutes dans les styles de composants.

Pour les animations, preferez l'interpolation oklch() pour des transitions perceptuelles plus fluides.

Questions frequemment posees

Comment convertir HEX en RGB et RGB en HEX ?

Pour HEX vers RGB, divisez le code en trois paires et parsez chacune en entier base-16. Pour RGB vers HEX, convertissez chaque canal en chaine hexadecimale a 2 chiffres et concatenez. Notre outil en ligne effectue ces conversions instantanement.

Quel est le meilleur format de couleur pour le web ?

HEX est le format par defaut pour la plupart des projets. HSL est meilleur pour le theming. oklch() est le meilleur choix pour les navigateurs modernes avec des couleurs perceptuellement uniformes et le gamut P3.

Quelles sont les exigences WCAG de contraste ?

AA exige un ratio de 4.5:1 pour le texte normal et 3:1 pour le grand texte. AAA exige 7:1 et 4.5:1. Les elements non textuels necessitent au moins 3:1. Testez toujours avec un verificateur de contraste.

La conversion de couleurs est une competence fondamentale reliant les outils de design, le CSS, l'accessibilite et le traitement back-end. Utilisez notre outil gratuit pour des conversions instantanees.

Lire aussi : notre guide approfondi sur la conversion HEX vers RGB pour plus de conseils.

Convertissez les couleurs entre HEX, RGB, HSL et plus avec notre convertisseur gratuit.

𝕏 Twitterin LinkedIn
Cet article vous a-t-il aidé ?

Restez informé

Recevez des astuces dev et les nouveaux outils chaque semaine.

Pas de spam. Désabonnez-vous à tout moment.

Essayez ces outils associés

🎹Color Converter🎹Hex to RGB Converter🎹Color Palette GeneratorTWTailwind CSS Color Picker

Articles connexes

Convertisseur Hex vers RGB : Guide des codes couleur pour développeurs

Convertisseur gratuit Hex vers RGB. Apprenez comment fonctionnent les codes couleur hexadécimaux avec des exemples en JavaScript, CSS et Python.

Guide des dégradés CSS : Des bases aux techniques avancées

Maßtrisez les dégradés CSS : linéaires, radiaux, coniques, répétitifs avec exemples, effets de texte et optimisation.

Variables CSS (Propriétés personnalisées) : Guide complet

Maßtrisez les propriétés personnalisées CSS. Syntaxe, portée, valeurs de repli, thÚme sombre et mises à jour dynamiques.