Skip to content

Instantly share code, notes, and snippets.

@Pamblam
Created January 7, 2019 15:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Pamblam/3e37b318583a84447bc5b27b8758dba5 to your computer and use it in GitHub Desktop.
Save Pamblam/3e37b318583a84447bc5b27b8758dba5 to your computer and use it in GitHub Desktop.
get a primary and secondary color name, estimated color name, and brightness from an rgb color and generate random colors
// http://jsfiddle.net/eLbznqx0/
class Color {
constructor(rgb) {
this.rgb = rgb;
this.colormap = {
"110": "yellow",
"101": "magenta",
"011": "cyan",
"100": "red",
"010": "green",
"001": "blue",
"111": "white",
"000": "black"
};
}
dominant_color() {
var max = Math.max(...this.rgb);
var min = Math.min(...this.rgb);
var range = max - min;
var scaled = this.rgb.map(v => v - min);
var scaled_pcts = this.rgb.map(v => (100 / range) * v);
var scaled_ints = scaled_pcts.map(v => v > 60 ? 1 : 0);
return this.colormap[scaled_ints.join('')];
}
secondary_color() {
var pcts = this.rgb.map(v => (100 / 255) * v);
var ints = pcts.map(v => v > 60 ? 1 : 0);
return this.colormap[ints.join('')];
}
name() {
var secondary_color = this.secondary_color();
var dominant_color = this.dominant_color();
if (secondary_color === dominant_color) return dominant_color;
if (secondary_color === "white" && dominant_color === "black") return "gray";
if (dominant_color === "white" && secondary_color === "black") return "gray";
if ("white" === secondary_color) return "light-" + dominant_color;
if ("white" === dominant_color) return "light-" + secondary_color;
if ("black" === secondary_color) return "dark-" + dominant_color;
if ("black" === dominant_color) return "dark-" + secondary_color;
return dominant_color + "-" + secondary_color;
}
brightness() {
var luma = 0.2126 * this.rgb[0] + 0.7152 * this.rgb[1] + 0.0722 * this.rgb[2];
var brightness = (100 / 255) * luma;
return Math.floor(brightness * 100) / 100;
}
static random() {
return new Color([
Math.floor(Math.random() * 255) + 1,
Math.floor(Math.random() * 255) + 1,
Math.floor(Math.random() * 255) + 1
]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment