我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript中的颜色模型如何应用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript中的颜色模型如何应用

本篇内容介绍了“JavaScript中的颜色模型如何应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

介绍

颜色模型,是用来表示颜色的数学模型。比如最常见的 RGB模型,使用 红绿蓝 三色来表示颜色。

一般的颜色模型,可以按照如下分类:

  • 面向硬件设备的颜色模型:RGB,CMYK,YCrCb。

  • 面向视觉感知的颜色模型:HSL,HSV(B),HSI,Lab。

不同的颜色模型有不同的应用场景,而RGB模型适合于显示器这样的的设备。

其中,前端支持的是 RGBHSL,即在前端页面中只有这两种模型的颜色值可以有效展示出来。

而对于 HSV,则是我们在创建颜色选择器插件时所需要了解的一种模型。

目前,chrome 浏览器,实现 H5 的颜色色盘,就是基于 HSV 模型:

JavaScript中的颜色模型如何应用

注意:fixfore 浏览器支持的仍然是电脑系统色盘(如win系统下,与画图软件中编辑颜色的色盘一样)。

本文将主要介绍 RGBHSLHSV 这三种模型。

RGB模型

RGB 即常说的 红(R)、绿(G)、蓝(B) 三原色模型,是运用最广泛的颜色模型。

特别是在前端开发中,几乎都使用该模型处理颜色。如:rgb(0, 0, 255)#d3d3d3

该模型通过红绿蓝三个颜色通道的变化和相互之间的混合叠加,使用不同的强度,表现出不同的颜色。

它是一种加色混色模型,在叠加混合的过程中,亮度等于色彩亮度的综合,混合的越多亮度就越高。

根据三色的取值不同,一般有以下几种类型:

  • R5G5B5(A1):16位,各色都用5位表示,取值范围 0-31(2^5 - 1),剩余1位作Alpha通道或者不用。

  • R5G6B5:16位,R和B占用5位,取值范围 0-31(2^5);G占用6位,取值范围 0-63(2^6 - 1)

  • R8G8B8:24位,各色都用8位表示,取值范围为 0-255(2^8 - 1)
    最多能有 2^24 种颜色,从24位开始的颜色就是真彩色,基本达到人眼极限。

  • R8G8B8(A8):32位,各色都用8位表示,取值范围为 0-255(2^8 - 1),剩余8位作Alpha通道或者不用。

这其中,最常见的当然就是24位和32位的类型。

三色通道中每个颜色有256阶的亮度,为0时最暗,255时最亮。

如果三色的数值都相同时,就会产生不同灰度值的灰度色调,都为0时最暗黑色,都为255时最亮白色。

RGB颜色值

先看下 RGB 颜色值在前端的展现,如红色:

'rgb(255, 0, 0)''rgba(255, 0, 0, 1)' // 带透明度'#ff0000''#f00' // 缩写'red' // 颜色名称

描述RGB模型,使用的颜色值,有 rgbhex16 进制两种方式。

rgb(0,0,0) 表示法,一般情况下,红绿蓝三色分别取值范围 0-255,如果加上 alpha 透明通道,则为 rgba(0,0,0,1)

hex 16进制表示法,采用十六进制对24比特的一种展示方式,如 #000000,共6位,每两位分别对应红绿蓝,相同时可缩写为 #000

hex也可以使用 #00000000,后面加上透明度的十六进制数值。

此外,在前端开发中,还可以使用颜色名称如 redgreengray 等标识颜色。

实际上,这里的颜色名称仍然是对应的一个RGB颜色值,有一个规定的颜色名称与值的关系表。大部分的颜色单词基本都能使用。

上面两种表示法的简单转换关系,如下所示。

rgb 转 hex

function getHex (num) {  let val = num.toString(16)  val = (val.length === 1) ? ('0' + val) : val  return val}function rgbaToHexa (red, green, blue, alpha) {  red = getHex(red)  green = getHex(green)  blue = getHex(blue)  alpha = Math.round(alpha * 255)  alpha = getHex(alpha)  return '#' + red + green + blue + alpha}

hex 转 rgb

function hexaToRgba (color) {  const value = color.slice(color.indexOf('#') + 1)  const isShort = value.length === 3 || value.length === 4  const hasAlpha = value.length === 4 || value.length === 8  const r = isShort ? (value.charAt(0) + value.charAt(0)) : value.substring(0, 2)  const g = isShort ? (value.charAt(1) + value.charAt(1)) : value.substring(2, 4)  const b = isShort ? (value.charAt(2) + value.charAt(2)) : value.substring(4, 6)  let a = hasAlpha ? (isShort ? (value.charAt(3) + value.charAt(3)) : value.substring(6, 8)) : 'FF'  a = parseFloat((parseInt(a, 16) / 255).toFixed(2))  return [parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), a]}

HSL模型

前端在颜色的处理上,除了支持 RGB 模型外,另外支持的就只有 HSL 模型,所以我们需要了下解该模型。

HSL 颜色值表示,红色:

hsl(0, 100%, 50%)hsla(0, 100%, 50%, 1) // 带透明度

HSL 是对色相H(hue)饱和度S(saturation)亮度L(lightness)的处理得到颜色的一种模型。

色相(H):色相、色调,代表人眼所能看到的不同的颜色,本质就是一种颜色。与 HSV(B) 模型中的 H 概念相同。 色相的定义中,许多的颜色分布在一个圆环上,取值范围则是 0-360度,每个角度代表着一种颜色。

在HSL和HSV的模型中,色相是以六大主色为基础,他们分别按 60 度的间隔排列在圆环上。这六大主色分别是:360°/0°红、60°黄、120°绿、180°青、240°蓝、300°洋红。

而在前端进行处理时,常常把圆环处理成长方形的色块,通过颜色的线性渐变方式进行分段处理,角度换算成一定的比例,如下所示:

JavaScript中的颜色模型如何应用

linear-gradient(90deg, #f00, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00);

饱和度(S):饱和度是指颜色的强度或纯度,使用 0 ~ 100% 的百分比来度量。

表示色相中颜色成分所占的比例,数值越大,颜色中的灰色越少,颜色越鲜艳,呈现的是一种从灰色到色相颜色的变化。

亮度(L):表现颜色的明暗程度,使用 0 ~ 100% 的百分比来度量。

反映色彩中混入的黑白两色,50% 处只有纯色,小于 50% 时,数值越小混入的黑色越多,越接近于黑色;大于 50% 时,数值越大混入的白色越多,越接近于白色。

L最大时必为白色,L最小时必为黑色。

体现的是从黑色到色相(H)选择颜色再到白色的过渡。

HSV(B)模型

HSV 颜色值表示,红色:

// 前端不支持hsv(0, 100%, 100%)hsva(0, 100%, 100%, 1) // 带透明度

HSV 采用色相H(hue)饱和度S(saturation)明度V(Value)3个参数来表示颜色的一种方式。

HSV 和 HSL 两个模型都是更偏向于视觉上直观的感觉。

而HSV 与 HSB 的内容基本是一样的,可以理解为两种不同写法而已,其中 B( brightness )。

色相(H):HSL 模型中的 H 色相。

饱和度(S):饱和度是指颜色的强度或纯度,使用 0 ~ 100% 的百分比来度量。

HSV 中更多的是反映色相的颜色中混入白色的值,值越大白色越少色相颜色越纯,值越小白色越多色相颜色越淡。

明度(V):表现颜色的明暗程度,使用 0 ~ 100% 的百分比来度量。

反映色相的颜色中混入的黑色的值,值越小黑色越多颜色更暗(黑),值越大黑色越少颜色更纯(亮)。

体现的是从黑色到色相(H)选择颜色的过渡。

RGB 与 HSL 的转换

下面是常用的 rgb 颜色值与 hsl 之间互相转换的代码。

注意:这两个过程中,由于取整去除了小数位,并不是完全可逆的,可能存在个别个位数的差值。

虽有些微差别,但在页面颜色显示上基本没分别,因为人眼分辨不出来。

rgb 转 hsl

function rgbToHsl (red, green, blue) {  red = red / 255  green = green / 255  blue = blue / 255  let hue = saturation = lightness = 0  const max = Math.max(red, green, blue)  const min = Math.min(red, green, blue)  const diff = max - min  const sum = max + min  lightness = sum / 2    if (diff) {    saturation = lightness > 0.5 ? diff / (2 - sum) : diff / sum    switch (max) {      case red:        hue = (green - blue) / diff + (green < blue ? 6 : 0)        break      case green:        hue = (blue - red) / diff + 2        break      case blue:        hue = (red - green) / diff + 4        break    }    hue = hue / 6  }  hue = Math.round(hue * 360)  saturation = Math.round(saturation * 100)  lightness = Math.round(lightness * 100)  return [hue, saturation, lightness]}

hsl 转 rgb

function hslToRgb(hue, saturation, lightness) {  hue = hue / 360  saturation = saturation / 100  lightness = lightness / 100  let red, green, blue  const hue2rgb = (val1, val2, vH) => {    vH = vH < 0 ? (vH + 1) : vH > 1 ? (vH - 1) : vH    if (vH < 1 / 6) {      return val1 + (val2 - val1) * 6 * vH    }    if (vH < 1 / 2) {      return val2    }    if (vH < 2 / 3) {      return val1 + (val2 - val1) * (2 / 3 - vH) * 6    }    return val1  }  if (saturation === 0) {    red = green = blue = lightness;  } else {    const val2 = lightness <= 0.5 ? lightness * (saturation + 1) : (lightness + saturation) - (lightness * saturation)    const val1 = lightness * 2 - val2    red = hue2rgb(val1, val2, hue + 1 / 3)    green = hue2rgb(val1, val2, hue)    blue = hue2rgb(val1, val2, hue - 1 / 3)  }  red = Math.round(red * 255)  green = Math.round(green * 255)  blue = Math.round(blue * 255)  return [red, green, blue]}

“JavaScript中的颜色模型如何应用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript中的颜色模型如何应用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript中的颜色模型如何应用

本篇内容介绍了“JavaScript中的颜色模型如何应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!介绍颜色模型,是用来表示颜色的数学模型
2023-07-05

JavaScript中颜色模型的基础知识与应用详解

颜色模型,是用来表示颜色的数学模型。比如最常见的 RGB模型,使用 红绿蓝 三色来表示颜色。本文就来和大家讲讲JavaScript中颜色模型的基础知识与应用吧
2023-02-22

如何在JavaScript中加颜色

JavaScript是一种广泛应用于网页开发的编程语言,它具有动态交互和实时修改页面的能力,可以为网页增添灵活性和展示效果。在JavaScript中,添加颜色是一个基本的操作,本文将详细介绍如何在JavaScript中加颜色,并提供一些实用的示例。一、 JavaScript中颜色的表示方法JavaScript中颜色是通过RGB(红绿蓝)值来表示的,RGB值是一组三个数字,代表了
2023-05-14

使用 JavaScript 控制 CSS 中的颜色

背景知识:颜色模型点开这篇文章的你,肯定是想要学习怎样控制颜色的——我们后面就会讲具体操作。但首先,我们需要对 CSS 如何标记颜色有一个基本的认识。CSS 使用的是两种颜色模型:RGB 和 HSL,我们先简单了解一下。RGBRGB 就是“
2023-06-03

win11应用磁贴如何设置颜色

今天小编给大家分享一下win11应用磁贴如何设置颜色的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、首先在桌面右击空白处随
2023-07-01

如何用JavaScript编写改变颜色函数

JavaScript编写改变颜色函数JavaScript是一种广泛应用于Web开发的编程语言。它可以让网页变得更具交互性和动态性。在JavaScript中,改变元素颜色是一项非常基础的操作,因为颜色可以传达信息,美化用户界面,但同时又非常简单。本文将介绍如何使用JavaScript编写改变颜色函数。一、使用JavaScript改变元素颜色要改变元素颜色,JavaScript需要
2023-05-14

javascript如何改变元素的背景颜色

这篇文章主要介绍了javascript如何改变元素的背景颜色,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。javascript改变元素的背景颜色的方法:首先创建p元素,在里面
2023-06-14

如何在 Vue 应用程序中改变文本颜色

Vue 软件是一种流行的前端开发框架,允许开发者创建强大的单页 Web 应用程序。它具有广泛的应用,包括构建动态网站、Web 应用程序、移动应用等。在 Vue 应用程序中,开发者可以使用文本框和其他基本元素来创建内容。因此,改变文本颜色是许多开发者关注的重点。下面将介绍如何在 Vue 应用程序中改变文本颜色。一、使用 style 标签改变文本颜色Vue 应用程序允许您通过 st
2023-05-14

Win10 Build 14316如何把应用调成黑色主题颜色

在新发布的 Windows 10 内部预览版 Build 14316 中,出现了一个可以让应用界面变成黑色的选项,类似于手机上常见的“夜间模式”。试想一下,晚上用电脑时,将“设置”、&ldqu
2023-05-20

计算机显示器采用的颜色模型是哪个

这篇文章主要介绍计算机显示器采用的颜色模型是哪个,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!计算机显示器采用的颜色模型是RGB模型。RGB模型又称为加色混色模型,使用红、绿、蓝三原色的亮度来定量表示颜色,以RGB三
2023-06-15

python中如何自定义封装带颜色的logging模块

本文小编为大家详细介绍“python中如何自定义封装带颜色的logging模块”,内容详细,步骤清晰,细节处理妥当,希望这篇“python中如何自定义封装带颜色的logging模块”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
2023-06-29

linux中如何设置文本模式下的字体颜色

这篇文章主要为大家展示了“linux中如何设置文本模式下的字体颜色”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux中如何设置文本模式下的字体颜色”这篇文章吧。操作步骤如下:1、在使用li
2023-06-13

如何在HTML中使用颜色代码?

在 HTML 中使用颜色代码可以为您的网页带来视觉效果和吸引力。本文将介绍如何在 HTML 中使用颜色代码,包括颜色名称、十六进制代码和 RGB 代码。同时,还将提供一些使用颜色代码的技巧和示例。
如何在HTML中使用颜色代码?
2024-02-14

MVVM模型在Vue中如何应用

本篇内容主要讲解“MVVM模型在Vue中如何应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MVVM模型在Vue中如何应用”吧!理解MVVM模型我们知道每一个 Vue 应用都是从创建一个新的实
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录