Created
December 4, 2015 08:58
-
-
Save nexpr/3e9b6bc4e8657f638d4e to your computer and use it in GitHub Desktop.
色扱う時のライブラリ。css3のカラーに対応。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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