hsl转rgb java_HSL&RGB互转

参考文章

hsl转rgb

/**

*

* @param {Number} H 色相 [0,360)

* @param {Number} S 饱和度 [0,1]

* @param {Number} L 亮度 [0,1]

* @param {Boolean} stringMode 是否返回字符串模式

*/

function HSL2RGB(H = 0, S = 0, L = 0, stringMode = false) {

const C = (1 - Math.abs(2 * L - 1)) * S

const X = C * (1 - Math.abs(((H / 60) % 2) - 1))

const m = L - C / 2

const vRGB = []

if (H >= 0 && H < 60) {

vRGB.push(C, X, 0)

} else if (H >= 60 && H < 120) {

vRGB.push(X, C, 0)

} else if (H >= 120 && H < 180) {

vRGB.push(0, C, X)

} else if (H >= 180 && H < 240) {

vRGB.push(0, X, C)

} else if (H >= 240 && H < 300) {

vRGB.push(X, 0, C)

} else if (H >= 300 && H < 360) {

vRGB.push(C, 0, X)

}

const [vR, vG, vB] = vRGB

const R = 255 * (vR + m)

const G = 255 * (vG + m)

const B = 255 * (vB + m)

if (stringMode) {

return `rgb(${R},${G},${B})`

}

return { R, G, B }

}

2.rgb转hsl

/**

* @description rgb转化为hsl

* @param {Number} R [0,255]

* @param {Number} G [0,255]

* @param {Number} B [0,255]

* @param {Boolean} stringMode 是否返回字符串模式

*/

function RGB2HSL(R = 0, G = 0, B = 0, stringMode = false) {

const _R = R / 255;

const _G = G / 255;

const _B = B / 255;

const Cmax = Math.max(_R, _G, _B);

const Cmin = Math.min(_R, _G, _B);

const V = Cmax - Cmin;

let H = 0;

if (V === 0) {

H = 0;

} else if (Cmax === _R) {

H = 60 * (((_G - _B) / V) % 6);

} else if (Cmax === _G) {

H = 60 * ((_B - _R) / V + 2);

} else if (Cmax === _B) {

H = 60 * ((_R - _G) / V + 4);

}

H = Math.floor(backCycle(H, 360));

const L = numberFixed((Cmax + Cmin) / 2);

const S = V === 0 ? 0 : numberFixed(V / (1 - Math.abs(2 * L - 1)));

if (stringMode) {

return `hsl(${H},${numberFixed(100 * S)}%,${numberFixed(100 * L)}%)`;

}

return { H, S, L };

}

// utils

function backCycle(num, cycle) {

let index = num % cycle;

if (index < 0) {

index += cycle;

}

return index;

}

function numberFixed(num = 0, count = 3) {

const power = Math.pow(10, count);

return Math.floor(num * power) / power;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值