mirror of
https://gitee.com/ant-design/ant-design.git
synced 2024-12-15 01:11:26 +08:00
607ad0dfdd
* feat: alpha color * chore: update
25 lines
863 B
TypeScript
25 lines
863 B
TypeScript
import { TinyColor } from '@ctrl/tinycolor';
|
|
|
|
function isStableColor(color: number): boolean {
|
|
return color >= 0 && color <= 255;
|
|
}
|
|
|
|
function getAlphaColor(frontColor: string, backgroundColor: string): string {
|
|
const { r: fR, g: fG, b: fB } = new TinyColor(frontColor).toRgb();
|
|
const { r: bR, g: bG, b: bB } = new TinyColor(backgroundColor).toRgb();
|
|
|
|
for (let fA = 0.01; fA <= 1; fA += 0.01) {
|
|
const r = Math.round((fR - bR * (1 - fA)) / fA);
|
|
const g = Math.round((fG - bG * (1 - fA)) / fA);
|
|
const b = Math.round((fB - bB * (1 - fA)) / fA);
|
|
if (isStableColor(r) && isStableColor(g) && isStableColor(b))
|
|
return new TinyColor({ r, g, b, a: Math.round(fA * 100) / 100 }).toRgbString();
|
|
}
|
|
|
|
// fallback
|
|
/* istanbul ignore next */
|
|
return new TinyColor({ r: fR, g: fG, b: fB, a: 1 }).toRgbString();
|
|
}
|
|
|
|
export default getAlphaColor;
|