Skip to content

Instantly share code, notes, and snippets.

@nexpr
Created December 4, 2015 08:58
Show Gist options
  • Save nexpr/3e9b6bc4e8657f638d4e to your computer and use it in GitHub Desktop.
Save nexpr/3e9b6bc4e8657f638d4e to your computer and use it in GitHub Desktop.
色扱う時のライブラリ。css3のカラーに対応。
var Colors = {
dat : {
aliceblue:"#f0f8ff",
antiquewhite:"#faebd7",
aqua:"#00ffff",
aquamarine:"#7fffd4",
azure:"#f0ffff",
beige:"#f5f5dc",
bisque:"#ffe4c4",
black:"#000000",
blanchedalmond:"#ffebcd",
blue:"#0000ff",
blueviolet:"#8a2be2",
brown:"#a52a2a",
burlywood:"#deb887",
cadetblue:"#5f9ea0",
chartreuse:"#7fff00",
chocolate:"#d2691e",
coral:"#ff7f50",
cornflowerblue:"#6495ed",
cornsilk:"#fff8dc",
crimson:"#dc143c",
cyan:"#00ffff",
darkblue:"#00008b",
darkcyan:"#008b8b",
darkgoldenrod:"#b8860b",
darkgray:"#a9a9a9",
darkgrey:"#a9a9a9",
darkgreen:"#006400",
darkkhaki:"#bdb76b",
darkmagenta:"#8b008b",
darkolivegreen:"#556b2f",
darkorange:"#ff8c00",
darkorchid:"#9932cc",
darkred:"#8b0000",
darksalmon:"#e9967a",
darkseagreen:"#8fbc8f",
darkslateblue:"#483d8b",
darkslategray:"#2f4f4f",
darkslategrey:"#2f4f4f",
darkturquoise:"#00ced1",
darkviolet:"#9400d3",
deeppink:"#ff1493",
deepskyblue:"#00bfff",
dimgray:"#696969",
dimgrey:"#696969",
dodgerblue:"#1e90ff",
firebrick:"#b22222",
floralwhite:"#fffaf0",
forestgreen:"#228b22",
fuchsia:"#ff00ff",
gainsboro:"#dcdcdc",
ghostwhite:"#f8f8ff",
gold:"#ffd700",
goldenrod:"#daa520",
gray:"#808080",
grey:"#808080",
green:"#008000",
greenyellow:"#adff2f",
honeydew:"#f0fff0",
hotpink:"#ff69b4",
indianred:"#cd5c5c",
indigo:"#4b0082",
ivory:"#fffff0",
khaki:"#f0e68c",
lavender:"#e6e6fa",
lavenderblush:"#fff0f5",
lawngreen:"#7cfc00",
lemonchiffon:"#fffacd",
lightblue:"#add8e6",
lightcoral:"#f08080",
lightcyan:"#e0ffff",
lightgoldenrodyellow:"#fafad2",
lightgray:"#d3d3d3",
lightgrey:"#d3d3d3",
lightgreen:"#90ee90",
lightpink:"#ffb6c1",
lightsalmon:"#ffa07a",
lightseagreen:"#20b2aa",
lightskyblue:"#87cefa",
lightslategray:"#778899",
lightslategrey:"#778899",
lightsteelblue:"#b0c4de",
lightyellow:"#ffffe0",
lime:"#00ff00",
limegreen:"#32cd32",
linen:"#faf0e6",
magenta:"#ff00ff",
maroon:"#800000",
mediumaquamarine:"#66cdaa",
mediumblue:"#0000cd",
mediumorchid:"#ba55d3",
mediumpurple:"#9370d8",
mediumseagreen:"#3cb371",
mediumslateblue:"#7b68ee",
mediumspringgreen:"#00fa9a",
mediumturquoise:"#48d1cc",
mediumvioletred:"#c71585",
midnightblue:"#191970",
mintcream:"#f5fffa",
mistyrose:"#ffe4e1",
moccasin:"#ffe4b5",
navajowhite:"#ffdead",
navy:"#000080",
oldlace:"#fdf5e6",
olive:"#808000",
olivedrab:"#6b8e23",
orange:"#ffa500",
orangered:"#ff4500",
orchid:"#da70d6",
palegoldenrod:"#eee8aa",
palegreen:"#98fb98",
paleturquoise:"#afeeee",
palevioletred:"#d87093",
papayawhip:"#ffefd5",
peachpuff:"#ffdab9",
peru:"#cd853f",
pink:"#ffc0cb",
plum:"#dda0dd",
powderblue:"#b0e0e6",
purple:"#800080",
red:"#ff0000",
rosybrown:"#bc8f8f",
royalblue:"#4169e1",
saddlebrown:"#8b4513",
salmon:"#fa8072",
sandybrown:"#f4a460",
seagreen:"#2e8b57",
seashell:"#fff5ee",
sienna:"#a0522d",
silver:"#c0c0c0",
skyblue:"#87ceeb",
slateblue:"#6a5acd",
slategray:"#708090",
slategrey:"#708090",
snow:"#fffafa",
springgreen:"#00ff7f",
steelblue:"#4682b4",
tan:"#d2b48c",
teal:"#008080",
thistle:"#d8bfd8",
tomato:"#ff6347",
turquoise:"#40e0d0",
violet:"#ee82ee",
wheat:"#f5deb3",
white:"#ffffff",
whitesmoke:"#f5f5f5",
yellow:"#ffff00",
yellowgreen:"#9acd32"
},
name2hex: function(name){
return name in this.dat ? this.dat[name] : false
},
hex2name: function(hex){
return Object.keys(this.filter(function(h, n){
return hex === h
}))
},
each: function(fn){
for(var k in this.dat){
this.dat.hasOwnProperty(k) && fn(this.dat[k], k, this.dat)
}
},
filter: function(fn){
var ret = {}
this.each(function(hex, name, t){
fn(hex, name, t) && (ret[name] = hex)
})
return ret
}
}
function rgb2hsv (r, g, b) {
r = r / 255;
g = g / 255;
b = b / 255;
var h = 0, s = 0, v = Math.max(r, g, b),
diff = v - Math.min(r, g, b),
diffc = function(c){
return (v - c) / 6 / diff + 1 / 2;
};
if (diff !== 0) {
var rr = diffc(r),
gg = diffc(g),
bb = diffc(b);
s = diff / v;
if (r === v) {
h = bb - gg;
}else if (g === v) {
h = (1 / 3) + rr - bb;
}else if (b === v) {
h = (2 / 3) + gg - rr;
}
if (h < 0) {
h += 1;
}else if (h > 1) {
h -= 1;
}
}
return {
h: Math.round(h * 360),
s: s,
v: v
};
}
function hsv2rgb(h, s, v) {
var r = v, g = v, b = v;
if (s !== 0) {
h = h / 60;
var i = Math.floor(h);
var p = v * (1 - s);
var q = v * (1 - (h - i) * s);
var t = v * (1 - (1 - (h - i)) * s);
switch(i) {
case 0: r = v, g = t, b = p; break;
case 1: r = q, g = v, b = p; break;
case 2: r = p, g = v, b = t; break;
case 3: r = p, g = q, b = v; break;
case 4: r = t, g = p, b = v; break;
case 5: r = v, g = p, b = q; break;
}
}
return {
r: Math.round(r * 255),
g: Math.round(g * 255),
b: Math.round(b * 255)
};
}
function to_color_array(maycolor){
var color_array = function(maycolor){
if(maycolor instanceof Object){
return parse_object_format(maycolor)
}
if(typeof maycolor === "boolean"){
return maycolor ? [255,255,255] : [0, 0, 0]
}
if(typeof maycolor === "string"){
var colstr = maycolor.trim()
return parse_hex_format(colstr)
|| parse_color_name_format(colstr)
|| parse_rgb_format(colstr)
}
if(typeof maycolor === "number"){
return parse_hex_format(maycolor.toString(16))
}
return false
}(maycolor)
color_array.__proto__ = ColorArray.prototype
return color_array
function parse_object_format(obj){
if(in255range(obj.r) && in255range(obj.g) && in255range(obj.b)){
return [~~obj.r, ~~obj.g, ~~obj.b]
}
if(in255range(obj[0]) && in255range(obj[1]) && in255range(obj[2])){
return [~~obj[0], ~~obj[1], ~~obj[2]]
}
return false
}
function parse_rgb_format(str){
var pintnum = "[1-9][0-9]*"
var zpintnum = "(?:" + pintnum + "|0)"
var mayspaces = "\\s*"
var parenbegin = "\\("
var parenend = "\\)"
var mayparenbegin = parenbegin + "?"
var mayparenend = parenend + "?"
var comma = "\\,"
var core = mayspaces + "(" + zpintnum + ")" + mayspaces + comma
+ mayspaces + "(" + zpintnum + ")" + mayspaces + comma
+ mayspaces + "(" + zpintnum + ")" + mayspaces
var re1 = "^" + "rgb" + mayspaces + parenbegin + core + parenend + "$"
var re2 = "^" + mayparenbegin + core + mayparenend + "$"
var match = str.match(new RegExp(re1)) || str.match(new RegExp(re2))
if(match){
var r = +match[1]
var g = +match[2]
var b = +match[3]
if(in255range(r) && in255range(g) && in255range(b)){
return [r, g, b]
}
}
return false
}
function parse_color_name_format(str){
var hex = Colors.name2hex(str)
if(hex){
return parse_hex_format(hex)
}else{
return false
}
}
function parse_hex_format(str){
var hex = "[0-9a-fA-F]"
var mkrep = function(x, a, b){
return arguments.length === 2 ?
x + "{" + ~~a + "}" :
x + "{" + ~~a + "," + ~~b + "}"
}
var mkor = function(/*...args*/){
return "(?:" + [].slice.call(arguments).join("|") + ")"
}
var mkcap = function(str){
return "(" + str + ")"
}
var re = "^\#?(" + mkcap(mkor(mkrep(hex, 3), mkrep(hex, 6))) + ")$"
var match = str.match(new RegExp(re))
if(match){
var hexcolor = match[1]
if(hexcolor.length === 3){
hexcolor = hexcolor.split("").map(function(e){
return e + e
}).join("")
}
return hexcolor.split("").reduce(function(acc, v, i){
if((i & 1) === 0){
acc.buf = v
}else{
acc.colarr.push(parseInt(acc.buf + v, 16))
}
return acc
}, {buf:null, colarr:[]}).colarr
}
return false
}
function in255range(x){
return x >= 0 && x <= 255
}
}
function to_hex(maycolor){
var color_array = (maycolor instanceof ColorArray) ? maycolor : to_color_array(maycolor)
return color_array && ("#" + color_array.map(function(e){
return ("0" + e.toString(16)).substr(-2)
}).join(""))
}
function ColorArray(maycolor){
var color = to_color_array(maycolor)
if(color){
this.length = 3
this[0] = color[0]
this[1] = color[1]
this[2] = color[2]
}
}
ColorArray.prototype.__proto__ = Array.prototype
ColorArray.prototype.toArray = Array.prototype.slice
ColorArray.prototype.to_hex = function(){
return this.length ? to_hex(this) : false
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment