Skip to content

logos-innovation-lab/luminance

Repository files navigation

@waku-objects/luminance

Tests standard-readme compliant js-standard-style

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.

Table of Contents

Install

pnpm install @waku-objects/luminance --save

Usage

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

License

MIT