831 Stimmen

RGB nach Hex und Hex nach RGB

Wie konvertiert man Farben im RGB-Format in das Hex-Format und umgekehrt?

Konvertieren Sie zum Beispiel '#0080C0' a (0, 128, 192) .

2voto

Chad Scira Punkte 9375

Ich brauchte eine Funktion, die auch ungültige Werte akzeptiert, wie

rgb(-255, 255, 255) rgb(510, 255, 255)

dies ist eine Abwandlung der Antwort von @cwolves

function rgb(r, g, b) {
  this.c = this.c || function (n) {
    return Math.max(Math.min(n, 255), 0)
  };

  return ((1 << 24) + (this.c(r) << 16) + (this.c(g) << 8) + this.c(b)).toString(16).slice(1).toUpperCase();
}

2voto

Patrick Roberts Punkte 44324

Ich stieß auf dieses Problem, da ich einen beliebigen Farbstringwert analysieren und eine Deckkraft angeben wollte, also schrieb ich diese Funktion, die die Canvas-API .

var toRGBA = function () {
  var canvas = document.createElement('canvas');
  var context = canvas.getContext('2d');

  canvas.width = 1;
  canvas.height = 1;

  return function (color) {
    context.fillStyle = color;
    context.fillRect(0, 0, 1, 1);

    var data = context.getImageData(0, 0, 1, 1).data;

    return {
      r: data[0],
      g: data[1],
      b: data[2],
      a: data[3]
    };
  };
}();

Hinweis zu context.fillStyle :

Wenn das Parsen des Wertes zu einem Fehler führt, muss er ignoriert werden und das Attribut muss seinen vorherigen Wert behalten.

Hier ist eine Stack Snippet-Demo, die Sie zum Testen von Eingaben verwenden können:

var toRGBA = function () {
  var canvas = document.createElement('canvas');
  var context = canvas.getContext('2d');

  canvas.width = 1;
  canvas.height = 1;

  return function (color) {
    context.fillStyle = color;
    context.fillRect(0, 0, 1, 1);

    var data = context.getImageData(0, 0, 1, 1).data;

    return {
      r: data[0],
      g: data[1],
      b: data[2],
      a: data[3]
    };
  };
}();

var inputs = document.getElementsByTagName('input');

function setColor() {
  inputs[1].value = JSON.stringify(toRGBA(inputs[0].value));
  document.body.style.backgroundColor = inputs[0].value;
}

inputs[0].addEventListener('input', setColor);
setColor();

input {
  width: 200px;
  margin: 0.5rem;
}

<input value="cyan" />
<input readonly="readonly" />

2voto

Roopesh Punkte 89

Eine einfache Antwort, um RGB in Hex zu konvertieren. Hier sind die Werte der Farbkanäle zwischen 0 und 255 eingeklemmt.

function RGBToHex(r = 0, g = 0, b = 0) {
    // clamp and convert to hex
    let hr = Math.max(0, Math.min(255, Math.round(r))).toString(16);
    let hg = Math.max(0, Math.min(255, Math.round(g))).toString(16);
    let hb = Math.max(0, Math.min(255, Math.round(b))).toString(16);
    return "#" +
        (hr.length<2?"0":"") + hr +
        (hg.length<2?"0":"") + hg +
        (hb.length<2?"0":"") + hb;
}

2voto

user3767878 Punkte 189
R = HexToR("#FFFFFF");
G = HexToG("#FFFFFF");
B = HexToB("#FFFFFF");

function HexToR(h) {return parseInt((cutHex(h)).substring(0,2),16)}
function HexToG(h) {return parseInt((cutHex(h)).substring(2,4),16)}
function HexToB(h) {return parseInt((cutHex(h)).substring(4,6),16)}
function cutHex(h) {return (h.charAt(0)=="#") ? h.substring(1,7):h}

Verwenden Sie diese Funktion, um das Ergebnis ohne Probleme zu erreichen :)

2voto

nachtigall Punkte 2387

Anstatt hier und da gefundene Schnipsel zu kopieren und einzufügen, würde ich empfehlen, eine gut getestete und gepflegte Bibliothek zu verwenden: Farben.js (verfügbar für node.js und Browser). Sie ist nur 7 KB groß (minified, gzipped noch weniger).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X