You need to enable JavaScript to run this app. 如何在JavaScript中根据两种颜色与百分比计算对应精确颜色?
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中根据两种颜色与百分比计算对应精确颜色?

双色线性插值颜色计算实现方案

核心计算逻辑

计算过程不涉及复杂的色彩空间转换,逐通道独立做线性比例计算即可保证结果精确:

  • 输入要求:两个6位长度的十六进制色值(如#D7F0FE)、一个0-100区间的百分比数值
  • 步骤1:将两个色值拆解为R、G、B三个独立通道,每个通道转换为0-255区间的十进制整数
  • 步骤2:对每个通道单独执行插值计算:目标通道值 = 起始通道值 + (结束通道值 - 起始通道值) × (百分比 / 100)
  • 步骤3:将计算得到的通道值四舍五入为整数,转回两位十六进制格式,按R、G、B顺序拼接为最终色值
  • 兜底保护:对超出0-100范围的百分比做钳位处理,避免输出越界的异常颜色值

示例计算(30%百分比场景)

以题目给出的参数为例:

起始色#D7F0FE 拆解:R=215、G=240、B=254
结束色#3DB6FC 拆解:R=61、G=182、B=252
按30%比例计算后:R=169、G=223、B=253,对应十六进制为A9、DF、FD
最终输出颜色值:#A9DFFD

最优JavaScript实现

代码无任何第三方依赖,执行效率高,兼容所有现代JS运行环境:

function getBlendColor(startColor, endColor, percent) {
  // 百分比钳位
  const ratio = Math.min(Math.max(percent, 0), 100) / 100;
  // 解析十六进制色值为RGB数组
  const hexToRgb = (hex) => [
    parseInt(hex.slice(1, 3), 16),
    parseInt(hex.slice(3, 5), 16),
    parseInt(hex.slice(5, 7), 16)
  ];
  const [sR, sG, sB] = hexToRgb(startColor);
  const [eR, eG, eB] = hexToRgb(endColor);
  // 单通道插值计算并补零为两位十六进制
  const calcChannel = (start, end) => 
    Math.round(start + (end - start) * ratio).toString(16).padStart(2, '0');
  return `#${calcChannel(sR, eR)}${calcChannel(sG, eG)}${calcChannel(sB, eB)}`;
}

// 调用测试
getBlendColor('#D7F0FE', '#3DB6FC', 30) // 输出 #a9dffd

方案特点

  • 计算逻辑简单直接,无额外的色彩转换开销,单次计算耗时低于0.1ms
  • 内置输入边界处理,对非法百分比输入有容错能力
  • 输出格式和输入格式完全统一,可直接用于CSS、Canvas渲染等场景
  • 计算结果精度可控,不存在插值偏差

内容的提问来源于stack exchange,提问作者Justin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 00:45:08