25 lines
682 B
TypeScript
25 lines
682 B
TypeScript
|
export const interpolateColor = (color1: string, color2: string, p: number) => {
|
||
|
const rgb1 = parseInt(color1.replace('#', ''), 16)
|
||
|
const rgb2 = parseInt(color2.replace('#', ''), 16)
|
||
|
|
||
|
const [r1, g1, b1] = toArray(rgb1)
|
||
|
const [r2, g2, b2] = toArray(rgb2)
|
||
|
|
||
|
const q = 1 - p
|
||
|
const rr = Math.round(r1 * q + r2 * p)
|
||
|
const rg = Math.round(g1 * q + g2 * p)
|
||
|
const rb = Math.round(b1 * q + b2 * p)
|
||
|
|
||
|
const hexString = Number((rr << 16) + (rg << 8) + rb).toString(16)
|
||
|
const hex = `#${'0'.repeat(6 - hexString.length)}${hexString}`
|
||
|
return hex
|
||
|
}
|
||
|
|
||
|
function toArray(rgb: number) {
|
||
|
const r = rgb >> 16
|
||
|
const g = (rgb >> 8) % 256
|
||
|
const b = rgb % 256
|
||
|
|
||
|
return [r, g, b]
|
||
|
}
|