97 lines
2.7 KiB
JavaScript
97 lines
2.7 KiB
JavaScript
/**
|
|
* Color space data and conversions
|
|
*
|
|
* @module color-space
|
|
*
|
|
*/
|
|
import rgb from './rgb.js'
|
|
import hsl from './hsl.js'
|
|
import hsv from './hsv.js'
|
|
import hsi from './hsi.js'
|
|
import hwb from './hwb.js'
|
|
import cmyk from './cmyk.js'
|
|
import cmy from './cmy.js'
|
|
import xyz from './xyz.js'
|
|
import xyy from './xyy.js'
|
|
import yiq from './yiq.js'
|
|
import yuv from './yuv.js'
|
|
import ydbdr from './ydbdr.js'
|
|
import ycgco from './ycgco.js'
|
|
import ypbpr from './ypbpr.js'
|
|
import ycbcr from './ycbcr.js'
|
|
import xvycc from './xvycc.js'
|
|
import yccbccrc from './yccbccrc.js'
|
|
import ucs from './ucs.js'
|
|
import uvw from './uvw.js'
|
|
import jpeg from './jpeg.js'
|
|
import lab from './lab.js'
|
|
import labh from './labh.js'
|
|
import lms from './lms.js'
|
|
import lchab from './lchab.js'
|
|
import luv from './luv.js'
|
|
import lchuv from './lchuv.js'
|
|
import hsluv from './hsluv.js'
|
|
import hpluv from './hpluv.js'
|
|
import oklab from './oklab.js'
|
|
import cubehelix from './cubehelix.js'
|
|
import coloroid from './coloroid.js'
|
|
import hcg from './hcg.js'
|
|
import hcy from './hcy.js'
|
|
import tsl from './tsl.js'
|
|
import yes from './yes.js'
|
|
import osaucs from './osaucs.js'
|
|
import hsp from './hsp.js'
|
|
import hsm from './hsm.js'
|
|
import lrgb from './lrgb.js'
|
|
|
|
|
|
/**
|
|
* Dict with all color spaces
|
|
*
|
|
* @type {{[key in SpaceId]: ColorSpace}}
|
|
*/
|
|
const spaces = {};
|
|
export default spaces;
|
|
|
|
|
|
/**
|
|
* Register new color space and conversions with all existing spaces
|
|
*
|
|
* @param {ColorSpace} newSpace
|
|
*/
|
|
export function register(newSpace) {
|
|
const newSpaceName = newSpace.name;
|
|
for (const existingSpaceName in spaces) {
|
|
if (!newSpace[existingSpaceName]) newSpace[existingSpaceName] = createConverter(newSpace, existingSpaceName);
|
|
|
|
const existingSpace = spaces[existingSpaceName]
|
|
if (!existingSpace[newSpaceName]) existingSpace[newSpaceName] = createConverter(existingSpace, newSpaceName);
|
|
}
|
|
spaces[newSpaceName] = newSpace
|
|
}
|
|
|
|
/**
|
|
* Creates a color space converter function.
|
|
*
|
|
* @param {ColorSpace} fromSpace
|
|
* @param {SpaceId} toSpaceName
|
|
* @returns {Transform}
|
|
*/
|
|
function createConverter(fromSpace, toSpaceName) {
|
|
//create xyz converter, if available
|
|
if (fromSpace.xyz && spaces.xyz[toSpaceName])
|
|
return (arg) => spaces.xyz[toSpaceName](fromSpace.xyz(arg));
|
|
|
|
//create rgb converter
|
|
if (fromSpace.rgb && spaces.rgb[toSpaceName])
|
|
return (arg) => spaces.rgb[toSpaceName](fromSpace.rgb(arg));
|
|
|
|
|
|
return () => {
|
|
throw new Error(`Conversion ${fromSpace.name} to ${toSpaceName} is not available`);
|
|
}
|
|
}
|
|
|
|
// register all spaces by default
|
|
[rgb, xyz, hsl, hsv, hsi, hwb, cmyk, cmy, xyy, yiq, yuv, ydbdr, ycgco, ypbpr, ycbcr, xvycc, yccbccrc, ucs, uvw, jpeg, lab, labh, lms, lchab, luv, lchuv, hsluv, hpluv, cubehelix, coloroid, hcg, hcy, tsl, yes, osaucs, hsp, hsm, lrgb, oklab].map(register)
|