Initial Commit
This commit is contained in:
115
node_modules/color-space/uvw.js
generated
vendored
Normal file
115
node_modules/color-space/uvw.js
generated
vendored
Normal file
@@ -0,0 +1,115 @@
|
||||
/**
|
||||
* https://en.wikipedia.org/wiki/CIE_1964_color_space
|
||||
*
|
||||
* Very similar to LUV, but w and v are calculated a bit differently.
|
||||
*
|
||||
* @module color-space/uvw
|
||||
*/
|
||||
import ucs from './ucs.js';
|
||||
import xyz from './xyz.js';
|
||||
|
||||
var uvw = {
|
||||
name: 'uvw',
|
||||
min: [-134, -140, 0],
|
||||
max: [224, 122, 100],
|
||||
channel: ['U', 'V', 'W'],
|
||||
alias: ['UVW', 'cieuvw', 'cie1964']
|
||||
};
|
||||
|
||||
export default (uvw);
|
||||
|
||||
/**
|
||||
* UVW to XYZ
|
||||
*/
|
||||
uvw.xyz = function (arg, i, o) {
|
||||
var _u, _v, w, u, v, x, y, z, xn, yn, zn, un, vn;
|
||||
u = arg[0], v = arg[1], w = arg[2];
|
||||
|
||||
if (w === 0) return [0, 0, 0];
|
||||
|
||||
//get illuminant/observer
|
||||
i = i || 'D65';
|
||||
o = o || 2;
|
||||
|
||||
xn = xyz.whitepoint[o][i][0];
|
||||
yn = xyz.whitepoint[o][i][1];
|
||||
zn = xyz.whitepoint[o][i][2];
|
||||
|
||||
un = (4 * xn) / (xn + (15 * yn) + (3 * zn));
|
||||
vn = (6 * yn) / (xn + (15 * yn) + (3 * zn));
|
||||
|
||||
y = Math.pow((w + 17) / 25, 3);
|
||||
|
||||
_u = u / (13 * w) + un || 0;
|
||||
_v = v / (13 * w) + vn || 0;
|
||||
|
||||
x = (6 / 4) * y * _u / _v;
|
||||
z = y * (2 / _v - 0.5 * _u / _v - 5);
|
||||
|
||||
return [x, y, z];
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* XYZ to UVW
|
||||
*
|
||||
* @return {Array<number>} An UVW array
|
||||
*/
|
||||
xyz.uvw = function (arr, i, o) {
|
||||
var x = arr[0], y = arr[1], z = arr[2], xn, yn, zn, un, vn;
|
||||
|
||||
//find out normal source u v
|
||||
i = i || 'D65';
|
||||
o = o || 2;
|
||||
|
||||
xn = xyz.whitepoint[o][i][0];
|
||||
yn = xyz.whitepoint[o][i][1];
|
||||
zn = xyz.whitepoint[o][i][2];
|
||||
|
||||
un = (4 * xn) / (xn + (15 * yn) + (3 * zn));
|
||||
vn = (6 * yn) / (xn + (15 * yn) + (3 * zn));
|
||||
|
||||
var _u = 4 * x / (x + 15 * y + 3 * z) || 0;
|
||||
var _v = 6 * y / (x + 15 * y + 3 * z) || 0;
|
||||
|
||||
//calc values
|
||||
var w = 25 * Math.pow(y, 1 / 3) - 17;
|
||||
var u = 13 * w * (_u - un);
|
||||
var v = 13 * w * (_v - vn);
|
||||
|
||||
return [u, v, w];
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* UVW to UCS
|
||||
*
|
||||
* @param {Array<number>} uvw UCS values
|
||||
*
|
||||
* @return {Array<number>} UVW values
|
||||
*/
|
||||
uvw.ucs = function (uvw) {
|
||||
//find chromacity variables
|
||||
throw new Error('Not implemented');
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* UCS to UVW
|
||||
*
|
||||
* @param {Array<number>} ucs UVW values
|
||||
*
|
||||
* @return {Array<number>} UCS values
|
||||
*/
|
||||
ucs.uvw = function (ucs) {
|
||||
// //find chromacity variables
|
||||
// var u = U / (U + V + W);
|
||||
// var v = V / (U + V + W);
|
||||
|
||||
// //find 1964 UVW
|
||||
// w = 25 * Math.pow(y, 1/3) - 17;
|
||||
// u = 13 * w * (u - un);
|
||||
// v = 13 * w * (v - vn);
|
||||
throw new Error('Not implemented');
|
||||
};
|
||||
Reference in New Issue
Block a user