74 lines
2.6 KiB
JavaScript
74 lines
2.6 KiB
JavaScript
/* eslint-disable */
|
|
// https://github.com/PimpTrizkit/PJs/wiki/12.-Shade,-Blend-and-Convert-a-Web-Color-(pSBC.js)#micro-functions-version-4
|
|
|
|
/**
|
|
* Blend color (Lighten or Darken)
|
|
* @param {number} p 混合百分比 范围 0.0 - 1.0
|
|
* @param {string} c0 rgb(a) color1
|
|
* @param {string} c1 rgb(a) color2
|
|
* @returns color
|
|
*/
|
|
exports.RGB_Linear_Blend=(p,c0,c1)=>{
|
|
var i=parseInt,r=Math.round,P=1-p,[a,b,c,d]=c0.split(","),[e,f,g,h]=c1.split(","),x=d||h,j=x?","+(!d?h:!h?d:r((parseFloat(d)*P+parseFloat(h)*p)*1000)/1000+")"):")";
|
|
return"rgb"+(x?"a(":"(")+r(i(a[3]=="a"?a.slice(5):a.slice(4))*P+i(e[3]=="a"?e.slice(5):e.slice(4))*p)+","+r(i(b)*P+i(f)*p)+","+r(i(c)*P+i(g)*p)+j;
|
|
}
|
|
|
|
/**
|
|
* Blend color (Lighten or Darken)
|
|
* @param {number} p 混合百分比 范围 0.0 - 1.0
|
|
* @param {string} c0 rgb(a) color1
|
|
* @param {string} c1 rgb(a) color2
|
|
* @returns color
|
|
*/
|
|
exports.RGB_Log_Blend=(p,c0,c1)=>{
|
|
var i=parseInt,r=Math.round,P=1-p,[a,b,c,d]=c0.split(","),[e,f,g,h]=c1.split(","),x=d||h,j=x?","+(!d?h:!h?d:r((parseFloat(d)*P+parseFloat(h)*p)*1000)/1000+")"):")";
|
|
return"rgb"+(x?"a(":"(")+r((P*i(a[3]=="a"?a.slice(5):a.slice(4))**2+p*i(e[3]=="a"?e.slice(5):e.slice(4))**2)**0.5)+","+r((P*i(b)**2+p*i(f)**2)**0.5)+","+r((P*i(c)**2+p*i(g)**2)**0.5)+j;
|
|
}
|
|
|
|
|
|
/**
|
|
* Shade color (Lighten or Darken)
|
|
* @param {number} p Shade 百分比范围为 -1.0 - 1.0 负为黑色,正为白色
|
|
* @param {string} c0 rgb(a) color
|
|
* @returns color
|
|
*/
|
|
exports.RGB_Linear_Shade=(p,c0)=>{
|
|
var i=parseInt,r=Math.round,[a,b,c,d]=c0.split(","),n=p<0,t=n?0:255*p,P=n?1+p:1-p;
|
|
return"rgb"+(d?"a(":"(")+r(i(a[3]=="a"?a.slice(5):a.slice(4))*P+t)+","+r(i(b)*P+t)+","+r(i(c)*P+t)+(d?","+d:")");
|
|
}
|
|
|
|
|
|
/**
|
|
* Shade color (Lighten or Darken)
|
|
* @param {number} p Shade 百分比范围为 -1.0 - 1.0 负为黑色,正为白色
|
|
* @param {string} c0 rgb(a) color
|
|
* @returns color
|
|
*/
|
|
exports.RGB_Log_Shade=(p,c0)=>{
|
|
var i=parseInt,r=Math.round,[a,b,c,d]=c0.split(","),n=p<0,t=n?0:p*255**2,P=n?1+p:1-p;
|
|
return"rgb"+(d?"a(":"(")+r((P*i(a[3]=="a"?a.slice(5):a.slice(4))**2+t)**0.5)+","+r((P*i(b)**2+t)**0.5)+","+r((P*i(c)**2+t)**0.5)+(d?","+d:")");
|
|
}
|
|
|
|
|
|
/**
|
|
* 修改透明度
|
|
* @param {number} p 透明度 -1.0 - 1.0
|
|
* @param {string} color
|
|
* @returns color
|
|
*/
|
|
exports.RGB_Alpha_Shade = (p, color) => {
|
|
var i = parseInt
|
|
var n = p < 0
|
|
var [r, g, b, a] = color.split(",")
|
|
r = r[3] == 'a' ? r.slice(5) : r.slice(4)
|
|
if (a) {
|
|
a = parseFloat(a)
|
|
a = a - (n ? (1 - a) * p : a * p)
|
|
a = n ? Math.max(0, a) : Math.min(1, a)
|
|
} else {
|
|
a = 1 - p
|
|
a = Math.min(1, a)
|
|
}
|
|
return `rgba(${i(r)}, ${i(g)}, ${i(b)}, ${a.toFixed(2)})`
|
|
}
|