UNPKG

color-delta-e

Version:

![npm](https://img.shields.io/npm/v/color-delta-e?color=crimson&label=latest&logo=npm&style=flat-square) ![npm bundle size](https://img.shields.io/bundlephobia/min/color-delta-e?logo=npm&label=min&style=flat-square) ![npm bundle size](https://img.shields.

189 lines (114 loc) 4.73 kB
![npm](https://img.shields.io/npm/v/color-delta-e?color=crimson&label=latest&logo=npm&style=flat-square) ![npm bundle size](https://img.shields.io/bundlephobia/min/color-delta-e?logo=npm&label=min&style=flat-square) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/color-delta-e?logo=npm&label=min-zipped&style=flat-square) ![GitHub Workflow Status](https://img.shields.io/github/workflow/status/Phl3bas/color-delta-e/CI?style=flat-square) # color-delta-e A Tiny library for measuring the perceived visual difference between two colors ## Defining Delta E ΔE - (Delta E, dE) The measure of change in visual perception of two given colors. Delta E is a metric for understanding how the human eye perceives color difference. The term delta comes from mathematics, meaning change in a variable or function. The suffix E references the German word Empfindung, which broadly means sensation. On a typical scale, the Delta E value will range from 0 to 100. | Delta E | Perception | | ------- | ---------- | |<= 1.0 | Not perceptible by human eyes. | |1 - 2 | Perceptible through close observation. | | 2 - 10 | Perceptible at a glance. | | 11 - 49 | Colors are more similar than opposite | | 100 | Colors are exact opposite | credit to: http://zschuessler.github.io/DeltaE/learn/ ## Installation ```bash npm install color-delta-e yarn add color-delta-e pnpm add color-delta-e ``` ## API ### `deltaE` takes two colors and measures the percievable difference between them and returns the deltaE value `0-100` ```typescript import { deltaE } from 'color-delta-e' const res = deltaE( [55,117,192], [14,81,162], 'rgb' // need to pass the type of the values if passing a tuple ) res // 14.143 ``` you can also pass values as strings, values dont have to be the same type ```typescript import { deltaE } from 'color-delta-e' const res = deltaE( 'rgb(55,117,192)', '#0e51a2', // the types will be inferred when using strings! ) res // 14.143 ``` #### Cached Results deltaE automatically caches results, in order to save calculation of the same colors, if you need to clear this cache in order to remove a potential memory leak there are two options. #### `nocache` option ```typescript import { deltaE } from 'color-delta-e' const res = deltaE( [55,117,192], [14,81,162], 'rgb', true, //nocache option: when set to tru will not cache the result. ) ``` #### `clearCache` ```typescript import { deltaE, clearCache } from 'color-delta-e' deltaE('#BADA55', '#C0FFEE') //result cached deltaE('#BADA55', '#C0FFEE') // cached result returned clearCache() deltaE('#BADA55', '#C0FFEE') // value recalculated and cached ``` ### `isPerceivable` takes two numbers an returns a boolean indicating if the value is above the threshold `default: 5` ```typescript import { isPerceivable } from 'color-delta-e' if(isPerceivable([55,117,192],[14,81,162])){ // do stuff } ``` ### `contrastText` takes a color and will return with `black` or `white` which ever contrasts best with provided color, the return type will be in same format inputted, so and rgb string will return an rgb string, a hex string will return a hex string. ```typescript import { contrastText } from 'color-delta-e' const res = contrastText([0,0,0]) res // '[255,255,255]' ``` ### `selector` takes in base options including base color to compare to, and threshold. rest arguments are a list of fallback colors to go through. selector will return the first color that has a perceptible contrast that meets the threshold provided. If no contrasting values found, will return the last fallback provided. ```typescript import { selector } from 'color-delta-e' const res = selector({ compare: [0, 0, 0] }, [0, 1, 0], [0, 2, 0], [200, 30, 10], [255, 255, 255] ); res // [200, 30, 10] ``` values dont have to be the same type ```typescript import { selector } from 'color-delta-e' const res = selector({ compare: 'hsl(0, 0%, 0%)' }, 'rgb(0, 1, 0)', '#002200', [200, 30, 10], [255, 255, 255] ); res // [200, 30, 10] ``` ### `sampleImage` takes in an `HTMLImageElement` will sample the image and return the average(median) color in image. only works in browser environments. doesn't support crossOrigin images. ```typescript import { sampleImage } from 'color-delta-e' const myImgEl = document.querySelector('img') const res = sampleImage(myImgEl) res // [100, 23, 221] ```