inkdrop
v0.2.2
Published
Javascript (TypeScript) color manipulation and conversion library.
Readme
InkDrop
Javascript (TypeScript) color manipulation and conversion library.
Motivation
This library doesn't perform any implicit conversions between different color models and implemented in a way so that js compilers with dead code elimination could easily remove unused code.
Installation
Npm package inkdrop provides umd modules, es6 modules at jsnext:main and TypeScript typings.
$ npm install inkdropColor models
All color models are using values with a range [0, 1] for all properties.
RgbColorHsvColorHslColorHwbColorCmykColorXyzColorXyyColorLabColorLchColor
Converters
rgbLinearize(rgb: RgbColor): RgbColorrgbDelinearize(lrgb: RgbColor): RgbColorrgbToHsl(rgb: RgbColor): HslColorhslToRgb(hsl: HslColor): RgbColorrgbToHsv(rgb: RgbColor): HsvColorhsvToRgb(hsv: HsvColor): RgbColorrgbToHwb(rgb: RgbColor): HwbColorhwbToRgb(hwb: HwbColor): RgbColorrgbToCmyk(rgb: RgbColor): CmykColorcmykToRgb(cmyk: CmykColor): RgbColorrgbToHex(rgb: RgbColor): stringhexToRgb(hex: string): RgbColorlinearRgbToXyz(lrgb: RgbColor): XyzColorxyzToLinearRgb(xyz: XyzColor): RgbColorxyzToXyy(xyz: XyzColor): XyyColorxyyToXyz(xyy: XyyColor): XyzColorxyzToLab(xyz: XyzColor): LabColorlabToXyz(lab: LabColor): XyzColorlabToLch(lab: LabColor): LchColorlchToLab(lch: LchColor): LabColorrgbToLab(rgb: RgbColor): LabColorlabToRgb(lab: LabColor): RgbColorrgbToLch(rgb: RgbColor): LchColorlchToRgb(lch: LchColor): RgbColor
Utils
luminance(rgb: RgbColor): numbercontrast(a: RgbColor, b: RgbColor): numbercontrastLevel(contrastRatio: number): numberfindBestContrast(a: RgbColor, bs: RgbColor[]): RgbColor | undefinedbrightness(rgb: RgbColor): numberisDark(rgb: RgbColor): booleanisLight(rgb: RgbColor): booleanlabDistanceCIE76(lab: LabColor): numberlabDistanceCIE94(lab: LabColor): numberclampRgb(rgb: RgbColor): RgbColor
Transformation functions
absDesaturate(hsl: HslColor, amount = 0.1): HslColorabsSaturate(hsl: HslColor, amount = 0.1): HslColorabsLighten(hsl: HslColor, amount = 0.1): HslColorabsDarken(hsl: HslColor, amount = 0.1): HslColorabsFadeIn(hsl: HslColor, amount = 0.1): HslColorabsFadeOut(hsl: HslColor, amount = 0.1): HslColorabsWhiten(hwb: HwbColor, amount = 0.1): HwbColorabsBlacken(hwb: HwbColor, amount = 0.1): HwbColorrelDesaturate(hsl: HslColor, ratio = 0.1): HslColorrelSaturate(hsl: HslColor, ratio = 0.1): HslColorrelLighten(hsl: HslColor, ratio = 0.1): HslColorrelDarken(hsl: HslColor, ratio = 0.1): HslColorrelFadeIn(hsl: HslColor, ratio = 0.1): HslColorrelFadeOut(hsl: HslColor, ratio = 0.1): HslColorrelWhiten(hwb: HwbColor, ratio = 0.1): HwbColorrelBlacken(hwb: HwbColor, ratio = 0.1): HwbColorspin(hsl: HslColor, amount: number): HslColormix(a: RgbColor, b: RgbColor, amount = 0.5): RgbColortint(rgb: RgbColor, amount = 0.5): RgbColorshade(rgb: RgbColor, amount = 0.5): RgbColornegate(rgb: RgbColor): RgbColorgreyscale(rgb: RgbColor): RgbColor
Blend functions
blend(c1: RgbColor, c2: RgbColor, mode: (a: number, b: number) => number): RgbColorblendMultiply(a: RgbColor, b: RgbColor): RgbColorblendScreen(a: RgbColor, b: RgbColor): RgbColorblendOverlay(a: RgbColor, b: RgbColor): RgbColorblendSoftlight(a: RgbColor, b: RgbColor): RgbColorblendHardlight(a: RgbColor, b: RgbColor): RgbColorblendDifference(a: RgbColor, b: RgbColor): RgbColorblendExclusion(a: RgbColor, b: RgbColor): RgbColorblendAverage(a: RgbColor, b: RgbColor): RgbColorblendNegation(a: RgbColor, b: RgbColor): RgbColor
Combination functions
complement(hsl: HslColor): HslColortriad(hsl: HslColor): [HslColor, HslColor, HslColor]tetrad(hsl: HslColor): [HslColor, HslColor, HslColor, HslColor]splitComplement(hsl: HslColor): [HslColor, HslColor, HslColor]analogous(hsl: HslColor, results = 6, slices = 30): HslColor[]monochromatic(hsv: HsvColor, results = 6): HsvColor[]
Text formatting functions
formatRgbToHex(rgb: RgbColor): stringformatRgbToString(rgb: RgbColor): stringformatHslToString(hsl: HslColor): stringformatHsvToString(hsv: HsvColor): string
Compare functions
Epsilon:
alpha = 1 / 100
rgb colors = 1 / 255
hue = 1 / 360
saturation, lightness, value, whiteness, blackness, cyan, magenta, yellow, black = 1 / 100almostEqualRgb(a: RgbColor, b: RgbColor): booleanalmostEqualHsl(a: HslColor, b: HslColor): booleanalmostEqualHsv(a: HsvColor, b: HsvColor): booleanalmostEqualHwb(a: HwbColor, b: HwbColor): booleanalmostEqualCmyk(a: CmykColor, b: CmykColor): boolean
