当前位置: 代码网 > it编程>编程语言>Javascript > 使用JavaScript实现计算颜色的相对亮度并确定相应的文本颜色

使用JavaScript实现计算颜色的相对亮度并确定相应的文本颜色

2024年05月28日 Javascript 我要评论
一、需求内容需求点:给出一组颜色列表,渲染对应的颜色以及颜色值,但是要保证文本颜色和背景色不冲突,文本颜色保持 black 和 white 两种即可示例如下:每个模块背景色为当前颜色,文案内容为当前颜

一、需求内容

需求点:给出一组颜色列表,渲染对应的颜色以及颜色值,但是要保证文本颜色和背景色不冲突,文本颜色保持 blackwhite 两种即可

示例如下:每个模块背景色为当前颜色,文案内容为当前颜色值,文案颜色为当前颜色通过计算后的 'black' 或 'white'

二、实现方案

思路

背景颜色与文本颜色不能冲突,亮的背景色展示黑色文案,深的背景色展示白色文案

使用 yuv 与 rgb 颜色转化公式

判断 a 的值,也就是透明度,透明度越小颜色越浅

实现流程

先把颜色转化成 rgba

根据计算公式 (r * 299 + g * 587 + b * 114) / 1000 将rgb颜色转换为yuv颜色

判断计算出来的值在判断 a 的值来确定文本颜色的值

三、代码实现

/**
 * 把十六进制颜色值转成 rgba 颜色值
 * @param {string} hex 
 * @returns {string} rgba 颜色值
 */
const hextorgba = (hex: string): string => {
  const rgba = []
  hex = hex.replace('#', '').padend(8, 'f')
  for (let i = 0; i < hex.length; i+=2) {
    rgba.push(parseint(hex.slice(i, i+2), 16))
  }
  return rgba.reduce((prev, item, index) => {
    return prev += index >= rgba.length - 1 ? number((item / 255).tofixed(2)) : `${item}, `
  }, 'rgba(') + ')'
}
/**
 * 计算文本颜色值
 * @param {string} hexcolor 
 * @returns {'black' | 'white'} 文本颜色值
 */
const determinetextcolor = (hexcolor: string): 'black' | 'white' => {
  // 将十六进制颜色值转换为 rgb 格式
  const rgbcolor = hextorgba(hexcolor);
  // 获取颜色的 rgb 分量
  const [r, g, b, a] = (rgbcolor.match(/\d+(\.\d+)?/g) || []).map(number);
  // 计算颜色的相对亮度
  const brightness = (r * 299 + g * 587 + b * 114) / 1000;
  // 根据相对亮度确定文本颜色
  return brightness > 125 ? 'black' : (a < 0.4 ? 'black' : 'white') 
}

四、案例效果展示

案例

const colorlist = [
  "#fafafaa6",
  "#000000ff",
  "#000000ee",
  "#000000aa",
  "#00000088",
  "#00000066",
  "#00000033",
  "#00000022",
  "#00000011",
  "#00000000",
  "#333333ff",
  "#ffffffff",
  "#ffffffee",
  "#ffffffbb",
  "#ffffffaa",
  "#ffffff99",
  "#ffffff88",
  "#ffffff66",
  "#ffffff33",
  "#ffffff22",
  "#ffffff11",
  "#344258ff",
  "#4caf50de",
  "#364fbbff",
  "#00000040",
  "#ff4d4fff",
  "#233494ff",
  "#0505050f",
  "#00000005",
  "#e7e8eaff",
  "#f5f7faff",
  "#7a7a7aff",
  "#1677ffff",
  "#69b1ffff",
  "#0958d9ff",
  "#00000014",
  "#0000001e",
  "#0000000c",
  "#52c41aff",
  "#faad14ff",
  "#00000073",
  "#0000000f",
  "#001529ff",
  "#002140ff",
  "#ffffff33",
  "#722ed1ff",
  "#13c2c2ff",
  "#eb2f96ff",
  "#f5222dff",
  "#fa8c16ff",
  "#fadb14ff",
  "#fa541cff",
  "#2f54ebff",
  "#a0d911ff",
  "#000000d9",
  "#adbbe0ff",
  "#5a71c7ff",
  "#fff2f0ff",
  "#ffffffa6",
  "#ffffff00",
  "#ffffff40",
  "#ff7875ff",
  "#000c17ff",
  "#0543c014",
  "#0000000a",
  "#ffa39eff",
  "#ff26050f",
  "#ffd666ff",
  "#ffd70519",
  "#d9363eff",
  "#00000026",
  "#dde2edff",
  "#f5f5f5ff",
  "#f0f0f0ff",
  "#d9d9d9ff",
  "#000fffff",
  "#000000a6",
  "#ebf0faff",
  "#8196d4ff",
  "#f6ffedff",
  "#d9f7beff",
  "#b7eb8fff",
  "#95de64ff",
  "#389e0dff",
  "#73d13dff",
  "#fff1f0ff",
  "#ffccc7ff",
  "#fffbe6ff",
  "#fff1b8ff",
  "#ffe58fff",
  "#d48806ff",
  "#ffc53dff",
  "#e6f4ffff",
  "#bae0ffff",
  "#91caffff",
  "#4096ffff",
  "#fafafaff",
  "#edededff",
  "#e0e0e0ff",
  "#d4d4d4ff",
  "#c7c7c7ff",
  "#a1a1a1ff",
  "#545454ff",
  "#2e2e2eff"
]
let html = '<ul>'
colorlist.foreach((item) => {
  const data = determinetextcolor(item)
  html += `<li style="background: ${item}; color: ${data}; border: 1px solid ${data};">${item}</li>`
})
html += '</ul>'
document.body.innerhtml = html

图片展示

到此这篇关于使用javascript实现计算颜色的相对亮度并确定相应的文本颜色的文章就介绍到这了,更多相关javascript计算颜色相对亮度内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com