// Canvas 前端取色 const getColorByCanvas = (img) => { return new Promise((resolve, reject) => { try { img.crossOrigin = "Anonymous"; const extract = () => { try { const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d"); canvas.width = 1; canvas.height = 1; ctx.drawImage(img, 0, 0, 1, 1); const [r, g, b] = ctx.getImageData(0, 0, 1, 1).data; resolve(`#${r.toString(16).padStart(2,"0")}${g.toString(16).padStart(2,"0")}${b.toString(16).padStart(2,"0")}`); } catch (e) { reject(e); } }; if (img.complete) extract(); else { img.addEventListener("load", extract, { once: true }); img.addEventListener("error", () => reject(new Error("img load failed")), { once: true }); } } catch (e) { reject(e); } }); }; // 应用取色结果 const applyColor = (value) => { if (getContrastYIQ(value) === "light") value = LightenDarkenColor(colorHex(value), -40); root.style.setProperty("--anzhiyu-bar-background", value); requestAnimationFrame(() => anzhiyu.initThemeColor()); if (GLOBAL_CONFIG.mainTone.cover_change) { document.documentElement.style.setProperty("--anzhiyu-main", value); document.documentElement.style.setProperty("--anzhiyu-theme-op", value + "23"); document.documentElement.style.setProperty("--anzhiyu-theme-op-deep", value + "dd"); } };