Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/skratchdot/color-stats

Generate color information based off of the hash of any object (or a valid color string)
https://github.com/skratchdot/color-stats

Last synced: 3 months ago
JSON representation

Generate color information based off of the hash of any object (or a valid color string)

Awesome Lists containing this project

README

        

# color-stats

[![NPM version](https://badge.fury.io/js/color-stats.svg)](http://badge.fury.io/js/color-stats)
[![Build Status](https://travis-ci.org/skratchdot/color-stats.png?branch=master)](https://travis-ci.org/skratchdot/color-stats)
[![Code Climate](https://codeclimate.com/github/skratchdot/color-stats.png)](https://codeclimate.com/github/skratchdot/color-stats)
[![Coverage Status](https://coveralls.io/repos/skratchdot/color-stats/badge.png)](https://coveralls.io/r/skratchdot/color-stats)
[![Dependency Status](https://david-dm.org/skratchdot/color-stats.svg)](https://david-dm.org/skratchdot/color-stats)
[![devDependency Status](https://david-dm.org/skratchdot/color-stats/dev-status.svg)](https://david-dm.org/skratchdot/color-stats#info=devDependencies)

[![NPM](https://nodei.co/npm/color-stats.png)](https://npmjs.org/package/color-stats)

## Description

Generate color information based off of the hash of any object. If you pass in a valid
color name or css value, the information for that color will be returned.

## Getting Started

Install the module with: `npm install color-stats`

```javascript
var colorStats = require('color-stats');
colorStats('red'); // get a bunch of stats about the color red
colorStats('#ff0000'); // get a bunch of stats about the color red
colorStats({info:"Based On Hash - always the same color"}); // get a color based on some object.
colorStats.random(); // get the stats for a random color
```

## Documentation

#### colorStats(colorObject)

Pass in a color string (or any object), and get the stats for that object.

#### colorStats.parse(colorObject)

This is the same as calling colorStats(colorObject). It's just a proxy for
people that like explicit function names.

#### colorStats.random()

Returns the stats for a random color.

## Example

#### Get Stats function call:
```javascript
var colorStats = require('color-stats');
var result = colorStats('#4682b4'); // see result output below
```

#### Get Stats Result:
```javascript
{
"lib": {
"onecolor": {
"red": 0.27450980392156865,
"green": 0.5098039215686274,
"blue": 0.7058823529411765,
"alpha": 1,
"hue": 0.5757575757575757,
"saturation": 0.611111111111111,
"value": 0.7058823529411765,
"lightness": 0.4901960784313726,
"cyan": 0.611111111111111,
"magenta": 0.2777777777777779,
"yellow": 0,
"black": 0.2941176470588235,
"x": 0.18743597342600288,
"y": 0.2056088063416628,
"z": 0.46152037838994725,
"l": 1,
"a": 1,
"b": 0.7058823529411765,
"hex": "#4682b4",
"hexa": "#ff4682b4",
"css": "rgb(70,130,180)",
"cssa": "rgba(70,130,180,1)",
"cmyk": [
"CMYK",
0.611111111111111,
0.2777777777777779,
0,
0.2941176470588235,
1
],
"hsl": [
"HSL",
0.5757575757575757,
0.43999999999999995,
0.4901960784313726,
1
],
"hsv": [
"HSV",
0.5757575757575757,
0.611111111111111,
0.7058823529411765,
1
],
"lab": [
"LAB",
1,
0,
0,
1
],
"rgb": [
"RGB",
0.27450980392156865,
0.5098039215686274,
0.7058823529411765,
1
],
"xyz": [
"XYZ",
0.18743597342600288,
0.2056088063416628,
0.46152037838994725,
1
]
},
"color": {
"rgb": {
"r": 70,
"g": 130,
"b": 180
},
"hsl": {
"h": 207,
"s": 44,
"l": 49
},
"hsv": {
"h": 207,
"s": 61,
"v": 71
},
"cmyk": {
"c": 61,
"m": 28,
"y": 0,
"k": 29
},
"rgbArray": [
70,
130,
180
],
"hslArray": [
207,
44,
49
],
"hsvArray": [
207,
61,
71
],
"cmykArray": [
61,
28,
0,
29
],
"rgbaArray": [
70,
130,
180,
1
],
"hslaArray": [
207,
44,
49,
1
],
"alpha": 1,
"red": 70,
"green": 130,
"blue": 180,
"hue": 207,
"saturation": 44,
"lightness": 49,
"saturationv": 61,
"value": 71,
"cyan": 61,
"magenta": 28,
"yellow": 0,
"black": 29,
"hexString": "#4682B4",
"rgbString": "rgb(70, 130, 180)",
"rgbaString": "rgba(70, 130, 180, 1)",
"percentString": "rgb(27%, 51%, 71%)",
"hslString": "hsl(207, 44%, 49%)",
"hslaString": "hsla(207, 44%, 49%, 1)",
"keyword": "steelblue",
"luminosity": 0.20562642207624857,
"dark": true,
"light": false
},
"colorConvert": {
"rgb": [
70,
130,
180
],
"hsl": [
207,
44,
49
],
"hsv": [
207,
61,
71
],
"hwb": [
207,
27,
29
],
"cmyk": [
61,
28,
0,
29
],
"keyword": "steelblue",
"xyz": [
19,
21,
46
],
"lab": [
52,
-4,
-32
],
"lch": [
52,
32,
263
],
"ansi16": 36,
"ansi": 74
}
},
"alpha": 1,
"cmyk": {
"c": 61.11,
"m": 27.78,
"y": 0,
"k": 29.41
},
"hsl": {
"h": 207.27,
"s": 44,
"l": 49.02
},
"hsv": {
"h": 207.27,
"s": 61.11,
"v": 70.59
},
"rgb": {
"r": 70,
"g": 130,
"b": 180
},
"rgbPercent": {
"r": 27.45,
"g": 50.98,
"b": 70.59
},
"hex": "#4682b4",
"hexTriplet": "4682b4",
"isRandom": false,
"parseSuccessful": true,
"closest": {
"name": "Steel Blue",
"rgb": [
70,
130,
180
]
},
"websafe": "#3399cc",
"websmart": "#4488bb",
"isWebsafe": false,
"isWebsmart": false,
"schemes": {
"complementary": [
"#4682b4",
"#b47846"
],
"splitComplementary": [
"#4682b4",
"#b4464b",
"#46b49d"
],
"splitComplementaryCW": [
"#4682b4",
"#b4464b",
"#46b478"
],
"splitComplementaryCCW": [
"#4682b4",
"#7846b4",
"#b4af46"
],
"triadic": [
"#4682b4",
"#b44682",
"#82b446"
],
"clash": [
"#4682b4",
"#af46b4",
"#4bb446"
],
"tetradic": [
"#4682b4",
"#af46b4",
"#b47846",
"#4bb446"
],
"fourToneCW": [
"#4682b4",
"#7846b4",
"#b47846",
"#82b446"
],
"fourToneCCW": [
"#4682b4",
"#b44682",
"#b47846",
"#46b478"
],
"fiveToneA": [
"#4682b4",
"#b4468b",
"#b44a46",
"#b4a646",
"#79b446"
],
"fiveToneB": [
"#4682b4",
"#5346b4",
"#af46b4",
"#b44670",
"#79b446"
],
"fiveToneC": [
"#4682b4",
"#6646b4",
"#af46b4",
"#b4a646",
"#46b49d"
],
"fiveToneD": [
"#4682b4",
"#5346b4",
"#b44a46",
"#4bb446",
"#46b48a"
],
"fiveToneE": [
"#4682b4",
"#b4468b",
"#94b446",
"#4bb446",
"#46b49d"
],
"sixToneCW": [
"#4682b4",
"#464bb4",
"#b44682",
"#b4464b",
"#82b446",
"#4bb446"
],
"sixToneCCW": [
"#4682b4",
"#af46b4",
"#b44682",
"#b4af46",
"#82b446",
"#46b4af"
],
"neutral": [
"#4682b4",
"#4667b4",
"#464bb4",
"#5c46b4",
"#7846b4",
"#9346b4"
],
"analogous": [
"#4682b4",
"#464bb4",
"#7846b4",
"#af46b4",
"#b44682",
"#b4464b"
]
},
"shades": [
"#4682b4",
"#3f75a2",
"#386890",
"#315b7e",
"#2a4e6c",
"#23415a",
"#1c3448",
"#152736",
"#0e1a24",
"#070d12"
],
"tints": [
"#4682b4",
"#598fbc",
"#6b9bc3",
"#7da8cb",
"#90b4d2",
"#a2c1da",
"#b5cde1",
"#c7dae9",
"#dae6f0",
"#ecf3f8"
],
"tones": [
"#4682b4",
"#4c82af",
"#5282aa",
"#5781a4",
"#5d819f",
"#63819a",
"#688194",
"#6e808f",
"#74808a",
"#7a8085"
],
"blind": {
"protanomaly": "#5e7db0",
"protanopia": "#6c7bae",
"deuteranomaly": "#597eb5",
"deuteranopia": "#647bb5",
"tritanomaly": "#3c859e",
"tritanopia": "#368792",
"achromatomaly": "#667c8e",
"achromatopsia": "#797979"
}
}
```

## Credits

Below are some of the libraries that are being used, and what they are used for:

- [onecolor](https://www.npmjs.org/package/onecolor) - parses color, and gets normalized data
- [color](https://www.npmjs.org/package/color) - gets un-normalized data and user friendly display
- [color-blind](https://www.npmjs.org/package/color-blind) - simulates color blindness
- [color-harmony](https://www.npmjs.org/package/color-harmony) - creates color scales/harmonies by rotating the hue of the given color
- [color-quantize](https://www.npmjs.org/package/color-quantize) - convert colors to websafe / websmart values
- [colorname](https://www.npmjs.org/package/colorname) - gets the closest color name
- [cycle](https://www.npmjs.org/package/cycle) - encodes cyclical structures in json
- [jsonfn](https://www.npmjs.org/package/jsonfn) - stringify non-json compatible objects
- [random-seed](https://www.npmjs.org/package/random-seed) - make sure our non-color objects always return the same information

## FAQ

#### Is it slow in a loop?

Yes

#### Why?

Because I'm trying to return "all the things" and depend on a lot of libraries (which
do some duplicate re-parsing, etc).

## Release History

#### v0.3.0 - Released June 28, 2014

- modifying return format so "lib" data is more explicit
- adding optional "rgbOnly" argument to random()
- don't allow an alpha channel of 0 when returning random colors

#### v0.2.1 - Released June 22, 2014

- colorStats.random() should return alpha channel sometimes

#### v0.2.0 - Released June 22, 2014

- fixing a bug with the harmonies/scales that were being generated

#### v0.1.0 - Released June 21, 2014

- initial release

## License

Copyright (c) 2014 skratchdot
Licensed under the MIT license.