p5
Version:
[](https://www.npmjs.com/package/p5)
766 lines (756 loc) • 12.3 kB
JavaScript
import color_conversion from '../color/color_conversion.js';
import '../main-BKN5yFoS.js';
import '../constants-BRcElHU3.js';
import '../core/transform.js';
import '../core/structure.js';
import '../core/environment.js';
import '../math/p5.Vector.js';
import '../rendering-CvUVN-Vb.js';
import '../creating_reading-Cr8L2Jnm.js';
import 'colorjs.io/fn';
import '../color/color_spaces/hsb.js';
import '../dom/p5.Element.js';
import '../dom/p5.File.js';
import '../io/p5.XML.js';
import '../p5.Renderer-R23xoC7s.js';
import '../image/filters.js';
import '../shape/custom_shapes.js';
import '../core/States.js';
import '../io/utilities.js';
import 'file-saver';
import '../dom/p5.MediaElement.js';
import '../shape/2d_primitives.js';
import '../core/helpers.js';
import '../shape/attributes.js';
import '../shape/curves.js';
import '../shape/vertex.js';
import '../color/setting.js';
import 'omggif';
import '../io/csv.js';
import 'gifenc';
import '../image/pixels.js';
import '../webgl/GeometryBuilder.js';
import '../math/p5.Matrix.js';
import '../math/Matrices/Matrix.js';
import '../math/Matrices/MatrixInterface.js';
import '../webgl/p5.Geometry.js';
import '../webgl/p5.DataArray.js';
import '../webgl/p5.Quat.js';
import '../webgl/p5.RenderBuffer.js';
import '../webgl/ShapeBuilder.js';
import 'libtess';
import '../webgl/GeometryBufferCache.js';
import '../image/const.js';
import '../math/trigonometry.js';
import '../image/filterRenderer2D.js';
/**
* @module Environment
* @submodule Environment
* @for p5
* @requires core
*/
function colorNamer(p5, fn){
//stores the original hsb values
let originalHSB;
//stores values for color name exceptions
const colorExceptions = [
{
h: 0,
s: 0,
b: 0.8275,
name: 'gray'
},
{
h: 0,
s: 0,
b: 0.8627,
name: 'gray'
},
{
h: 0,
s: 0,
b: 0.7529,
name: 'gray'
},
{
h: 0.0167,
s: 0.1176,
b: 1,
name: 'light pink'
}
];
//stores values for color names
const colorLookUp = [
{
h: 0,
s: 0,
b: 0,
name: 'black'
},
{
h: 0,
s: 0,
b: 0.5,
name: 'gray'
},
{
h: 0,
s: 0,
b: 1,
name: 'white'
},
{
h: 0,
s: 0.5,
b: 0.5,
name: 'dark maroon'
},
{
h: 0,
s: 0.5,
b: 1,
name: 'salmon pink'
},
{
h: 0,
s: 1,
b: 0,
name: 'black'
},
{
h: 0,
s: 1,
b: 0.5,
name: 'dark red'
},
{
h: 0,
s: 1,
b: 1,
name: 'red'
},
{
h: 5,
s: 0,
b: 1,
name: 'very light peach'
},
{
h: 5,
s: 0.5,
b: 0.5,
name: 'brown'
},
{
h: 5,
s: 0.5,
b: 1,
name: 'peach'
},
{
h: 5,
s: 1,
b: 0.5,
name: 'brick red'
},
{
h: 5,
s: 1,
b: 1,
name: 'crimson'
},
{
h: 10,
s: 0,
b: 1,
name: 'light peach'
},
{
h: 10,
s: 0.5,
b: 0.5,
name: 'brown'
},
{
h: 10,
s: 0.5,
b: 1,
name: 'light orange'
},
{
h: 10,
s: 1,
b: 0.5,
name: 'brown'
},
{
h: 10,
s: 1,
b: 1,
name: 'orange'
},
{
h: 15,
s: 0,
b: 1,
name: 'very light yellow'
},
{
h: 15,
s: 0.5,
b: 0.5,
name: 'olive green'
},
{
h: 15,
s: 0.5,
b: 1,
name: 'light yellow'
},
{
h: 15,
s: 1,
b: 0,
name: 'dark olive green'
},
{
h: 15,
s: 1,
b: 0.5,
name: 'olive green'
},
{
h: 15,
s: 1,
b: 1,
name: 'yellow'
},
{
h: 20,
s: 0,
b: 1,
name: 'very light yellow'
},
{
h: 20,
s: 0.5,
b: 0.5,
name: 'olive green'
},
{
h: 20,
s: 0.5,
b: 1,
name: 'light yellow green'
},
{
h: 20,
s: 1,
b: 0,
name: 'dark olive green'
},
{
h: 20,
s: 1,
b: 0.5,
name: 'dark yellow green'
},
{
h: 20,
s: 1,
b: 1,
name: 'yellow green'
},
{
h: 25,
s: 0.5,
b: 0.5,
name: 'dark yellow green'
},
{
h: 25,
s: 0.5,
b: 1,
name: 'light green'
},
{
h: 25,
s: 1,
b: 0.5,
name: 'dark green'
},
{
h: 25,
s: 1,
b: 1,
name: 'green'
},
{
h: 30,
s: 0.5,
b: 1,
name: 'light green'
},
{
h: 30,
s: 1,
b: 0.5,
name: 'dark green'
},
{
h: 30,
s: 1,
b: 1,
name: 'green'
},
{
h: 35,
s: 0,
b: 0.5,
name: 'light green'
},
{
h: 35,
s: 0,
b: 1,
name: 'very light green'
},
{
h: 35,
s: 0.5,
b: 0.5,
name: 'dark green'
},
{
h: 35,
s: 0.5,
b: 1,
name: 'light green'
},
{
h: 35,
s: 1,
b: 0,
name: 'very dark green'
},
{
h: 35,
s: 1,
b: 0.5,
name: 'dark green'
},
{
h: 35,
s: 1,
b: 1,
name: 'green'
},
{
h: 40,
s: 0,
b: 1,
name: 'very light green'
},
{
h: 40,
s: 0.5,
b: 0.5,
name: 'dark green'
},
{
h: 40,
s: 0.5,
b: 1,
name: 'light green'
},
{
h: 40,
s: 1,
b: 0.5,
name: 'dark green'
},
{
h: 40,
s: 1,
b: 1,
name: 'green'
},
{
h: 45,
s: 0.5,
b: 1,
name: 'light turquoise'
},
{
h: 45,
s: 1,
b: 0.5,
name: 'dark turquoise'
},
{
h: 45,
s: 1,
b: 1,
name: 'turquoise'
},
{
h: 50,
s: 0,
b: 1,
name: 'light sky blue'
},
{
h: 50,
s: 0.5,
b: 0.5,
name: 'dark cyan'
},
{
h: 50,
s: 0.5,
b: 1,
name: 'light cyan'
},
{
h: 50,
s: 1,
b: 0.5,
name: 'dark cyan'
},
{
h: 50,
s: 1,
b: 1,
name: 'cyan'
},
{
h: 55,
s: 0,
b: 1,
name: 'light sky blue'
},
{
h: 55,
s: 0.5,
b: 1,
name: 'light sky blue'
},
{
h: 55,
s: 1,
b: 0.5,
name: 'dark blue'
},
{
h: 55,
s: 1,
b: 1,
name: 'sky blue'
},
{
h: 60,
s: 0,
b: 0.5,
name: 'gray'
},
{
h: 60,
s: 0,
b: 1,
name: 'very light blue'
},
{
h: 60,
s: 0.5,
b: 0.5,
name: 'blue'
},
{
h: 60,
s: 0.5,
b: 1,
name: 'light blue'
},
{
h: 60,
s: 1,
b: 0.5,
name: 'navy blue'
},
{
h: 60,
s: 1,
b: 1,
name: 'blue'
},
{
h: 65,
s: 0,
b: 1,
name: 'lavender'
},
{
h: 65,
s: 0.5,
b: 0.5,
name: 'navy blue'
},
{
h: 65,
s: 0.5,
b: 1,
name: 'light purple'
},
{
h: 65,
s: 1,
b: 0.5,
name: 'dark navy blue'
},
{
h: 65,
s: 1,
b: 1,
name: 'blue'
},
{
h: 70,
s: 0,
b: 1,
name: 'lavender'
},
{
h: 70,
s: 0.5,
b: 0.5,
name: 'navy blue'
},
{
h: 70,
s: 0.5,
b: 1,
name: 'lavender blue'
},
{
h: 70,
s: 1,
b: 0.5,
name: 'dark navy blue'
},
{
h: 70,
s: 1,
b: 1,
name: 'blue'
},
{
h: 75,
s: 0.5,
b: 1,
name: 'lavender'
},
{
h: 75,
s: 1,
b: 0.5,
name: 'dark purple'
},
{
h: 75,
s: 1,
b: 1,
name: 'purple'
},
{
h: 80,
s: 0.5,
b: 1,
name: 'pinkish purple'
},
{
h: 80,
s: 1,
b: 0.5,
name: 'dark purple'
},
{
h: 80,
s: 1,
b: 1,
name: 'purple'
},
{
h: 85,
s: 0,
b: 1,
name: 'light pink'
},
{
h: 85,
s: 0.5,
b: 0.5,
name: 'purple'
},
{
h: 85,
s: 0.5,
b: 1,
name: 'light fuchsia'
},
{
h: 85,
s: 1,
b: 0.5,
name: 'dark fuchsia'
},
{
h: 85,
s: 1,
b: 1,
name: 'fuchsia'
},
{
h: 90,
s: 0.5,
b: 0.5,
name: 'dark fuchsia'
},
{
h: 90,
s: 0.5,
b: 1,
name: 'hot pink'
},
{
h: 90,
s: 1,
b: 0.5,
name: 'dark fuchsia'
},
{
h: 90,
s: 1,
b: 1,
name: 'fuchsia'
},
{
h: 95,
s: 0,
b: 1,
name: 'pink'
},
{
h: 95,
s: 0.5,
b: 1,
name: 'light pink'
},
{
h: 95,
s: 1,
b: 0.5,
name: 'dark magenta'
},
{
h: 95,
s: 1,
b: 1,
name: 'magenta'
}
];
//returns text with color name
function _calculateColor(hsb) {
let colortext;
//round hue
if (hsb[0] !== 0) {
hsb[0] = Math.round(hsb[0] * 100);
let hue = hsb[0].toString().split('');
const last = hue.length - 1;
hue[last] = parseInt(hue[last]);
//if last digit of hue is < 2.5 make it 0
if (hue[last] < 2.5) {
hue[last] = 0;
//if last digit of hue is >= 2.5 and less than 7.5 make it 5
} else if (hue[last] >= 2.5 && hue[last] < 7.5) {
hue[last] = 5;
}
//if hue only has two digits
if (hue.length === 2) {
hue[0] = parseInt(hue[0]);
//if last is greater than 7.5
if (hue[last] >= 7.5) {
//add one to the tens
hue[last] = 0;
hue[0] = hue[0] + 1;
}
hsb[0] = hue[0] * 10 + hue[1];
} else {
if (hue[last] >= 7.5) {
hsb[0] = 10;
} else {
hsb[0] = hue[last];
}
}
}
//map brightness from 0 to 1
hsb[2] = hsb[2] / 255;
//round saturation and brightness
for (let i = hsb.length - 1; i >= 1; i--) {
if (hsb[i] <= 0.25) {
hsb[i] = 0;
} else if (hsb[i] > 0.25 && hsb[i] < 0.75) {
hsb[i] = 0.5;
} else {
hsb[i] = 1;
}
}
//after rounding, if the values are hue 0, saturation 0 and brightness 1
//look at color exceptions which includes several tones from white to gray
if (hsb[0] === 0 && hsb[1] === 0 && hsb[2] === 1) {
//round original hsb values
for (let i = 2; i >= 0; i--) {
originalHSB[i] = Math.round(originalHSB[i] * 10000) / 10000;
}
//compare with the values in the colorExceptions array
for (let e = 0; e < colorExceptions.length; e++) {
if (
colorExceptions[e].h === originalHSB[0] &&
colorExceptions[e].s === originalHSB[1] &&
colorExceptions[e].b === originalHSB[2]
) {
colortext = colorExceptions[e].name;
break;
} else {
//if there is no match return white
colortext = 'white';
}
}
} else {
//otherwise, compare with values in colorLookUp
for (let i = 0; i < colorLookUp.length; i++) {
if (
colorLookUp[i].h === hsb[0] &&
colorLookUp[i].s === hsb[1] &&
colorLookUp[i].b === hsb[2]
) {
colortext = colorLookUp[i].name;
break;
}
}
}
return colortext;
}
//gets rgba and returs a color name
fn._rgbColorName = function(arg) {
//conversts rgba to hsb
let hsb = color_conversion._rgbaToHSBA(arg);
//stores hsb in global variable
originalHSB = hsb;
//calculate color name
return _calculateColor([hsb[0], hsb[1], hsb[2]]);
};
}
if(typeof p5 !== 'undefined'){
colorNamer(p5, p5.prototype);
}
export { colorNamer as default };