Library for calculating color luminance and getting corresponding luminance colors
Warning: This project is in beta state. There might (and most probably will) be changes in the future to its API and working. Also, no guarantees can be made about its stability, efficiency, and security at this stage.
pnpm install @waku-objects/luminance --save
import { calculateLuminance, getClosestColor } from '@waku-objects/luminance'
// Calculate luminance of a color (luminance is between 0 and 1)
calculateLuminance('#acacac') // supports hex
calculateLuminance({ r: 200, g: 200, b: 200 }) // and RGB
// Finds a color with the same hue that would fullfil target luminance
getClosestColor('#ff0000', 0.5) // returns #ffa2a2
getClosestColor({ r: 255, g: 0, b: 9 }, 0.5) // returns #ffa2a2
List of all functions and interfaces:
interface RGB {
r: number
g: number
b: number
}
interface HSL {
h: number
s: number
l: number
}
export interface HUE {
p: number
q: number
t: number
}
// Utility conversion functions
function hexToRgb(hex: string): RGB
function rgbToHex(rgb: RGB): string
function hslToRgb(hsl: HSL): RGB
function rgbToHsl(rgb: RGB): HSL
// Calculate luminance
function calculateLuminance(color: RGB | string): number
// Find color with same hue that would be closest to a targetLuminance (uses bisection algorithm with at most 100 iterations)
function getClosestColor(
sourceColor: string,
targetLuminance: number,
targetPrecision?: number,
maxSteps?: number
): string
function getClosestColorBisection(
sourceColor: string,
targetLuminance: number,
targetPrecision?: number,
maxSteps?: number
): string
// Implementation with newton itterative method, better results than bisection for more than 100 iterations
function getClosestColorNewton(
sourceColor: string,
targetLuminance: number,
targetPrecision?: number,
maxSteps?: number
): string