目標是創建一個函數,可以將十六進位顏色變亮或變暗特定量。此外,您想要處理 RGB 顏色並將顏色混合在一起。
<code class="javascript">function LightenDarkenColor(col, amt) { col = parseInt(col, 16); return (((col & 0x0000FF) + amt) | ((((col >> 8) & 0x00FF) + amt) << 8) | (((col >> 16) + amt) << 16)).toString(16); } // TEST console.log(LightenDarkenColor("3F6D2A", 40));
此函數的工作原理是將十六進位顏色轉換為整數,然後添加或減去每個RGB 通道的指定數量,然後將結果轉換回十六進位顏色。
要增強功能,您可以添加錯誤處理和對不同顏色的支援顏色格式(RGB、HSL)。您也可以透過傳入第二個顏色參數來新增將顏色混合在一起的功能。
<code class="javascript">function pSBC(p, c0, c1, l) { let r, g, b, P, f, t, h, i = parseInt; if (typeof(p) != "number" || p <-1 || p > 1 || typeof(c0) != "string" || (c0[0] != 'r' && c0[0] != '#') || (c1 && !a)) return null; if (!this.pSBCr) this.pSBCr = (d) => { let n = d.length, x = {}; if (n > 9) { [r, g, b, a] = d = d.split(","); n = d.length; if (n < 3 || n > 4) return null; x.r = i(r[3] == "a" ? r.slice(5): r.slice(4), 16); x.g = i(g); x.b = i(b); x.a = a ? parseFloat(a) : -1; } else { if (n == 8 || n == 6 || n < 4) return null; if (n < 6) d = "#" + d[1] + d[1] + d[2] + d[2] + d[3] + d[3] + (n > 4 ? d[4] + d[4] : ""); d = i(d.slice(1), 16); if (n == 9 || n == 5) x.r = d >> 24 & 255, x.g = d >> 16 & 255, x.b = d >> 8 & 255, x.a = m((d & 255) / 0.255) /1000; else x.r = d >> 16, x.g = d >> 8 & 255, x.b = d & 255, x.a = -1; } return x; }; h = c0.length > 9; h = a ? c1.length > 9 ? true : c1 == "c"?!h : false : h; f = this.pSBCr(c0); P = p < 0; t = c1 && c1 != "c" ? this.pSBCr(c1) : P ? {r:0,g:0,b:0,a:-1} : {r:255,g:255,b:255,a:-1}; p = P ? p*-1 : p; P = 1-p; if (!f || !t) return null; if (l) r = m(P*f.r + p*t.r), g = m(P*f.g + p*t.g), b = m(P*f.b + p*t.b); else r = m((P*f.r**2 + p*t.r**2)**0.5), g = m((P*f.g**2 + p*t.g**2)**0.5), b = m((P*f.b**2 + p*t.b**2)**0.5); a = f.a, t = t.a, f= a >= 0 || t >= 0, a = f ? a < 0 ? t : t < 0 ? a : a*P + t*p : 0; if (h) return "rgb" + (f ? "a(" : "(") +r + "," +g + "," +b + (f ? "," + m(a*1000)/1000 : "") + ")"; else return "#" + (4294967296+r*16777216+g*65536+b*256+(f ? m(a*255):0)).toString(16).slice(1, (f? undefined : -2)); }</code>
此改進版本包括以下功能:
以上是如何以程式設計方式調亮或調暗十六進位顏色、處理 RGB 顏色以及將顏色混合在一起?的詳細內容。更多資訊請關注PHP中文網其他相關文章!