确定 HSL 变化以将一种颜色转换为另一种颜色

2023-12-26

I use LESS,我想利用各种综合颜色函数 http://lesscss.org/functions/#color-operations允许仅设置几种基本颜色,然后派生其他变化色相、饱和度、亮度、旋转、 ecc.

假设我的着色器中有以下 2 种颜色(本例中为浅绿色和深绿色):

@primary-color:    rgb(0,100,60);
@secondary-color:  rgb(185,215,50); 

我只想明确设置@primary-color进而obtain @secondary-color经过适当的 HSL 转换后。 (例如darken(hsl(90, 80%, 50%), 20%) )

有什么办法可以确定我必须应用什么 hsl 设置@primary-color为了获得@secondary-color?

换句话说:

给定 2 个 RGB 颜色定义,有什么方法可以确定两者之间的差异Hue, 饱和 and 亮度,存在于它们之间,表示@secondary-color作为一个变体@primary-color?

P.S.:如有必要,也许还可以借助 Photoshop 等外部工具。


这是计算两种颜色的色相、饱和度和亮度值之间的差异,然后用它根据第一种颜色计算第二种颜色的方法。

各个步骤如下:

  • 色差计算:使用以下公式计算两种给定颜色之间的色相、饱和度和亮度差异hue(), saturation() and lightness()功能。这个函数可以单独使用,只是单独输出差异。
  • Arriving at the secondary color based on primary: This is a three step process and they are as follows:
    • 使用 调整原色的色调spin()通过传递两种颜色之间的色调差异来实现功能
    • 通过使用调整色调调整颜色(来自上一步)的饱和度saturate() or desaturate()功能取决于差异。
    • 使用 调整饱和度调整颜色的亮度(来自上一步)darken() or lighten()功能取决于差异。

这个答案是对此的较少改编SASS文章 http://thesassway.com/advanced/how-to-programtically-go-from-one-color-to-another-in-sass关于如何从一种颜色计算另一种颜色。

@primary: rgb(0,100,60); /* primary color */
@secondary: rgb(185,215,50); /* secondary color */

/* mixin to calculate the difference between two given colors */
.color-diff(@color1; @color2){ 
    @hueDiff: hue(@color2) - hue(@color1);
    @saturationDiff: saturation(@color1) - saturation(@color2);
    @lightnessDiff: lightness(@color1)- lightness(@color2);

    color1: @color1; color2:@color2; /* just for testing, can be removed */
}

/* Step 1: mixin to adjust the hue difference between the colors */
.adjust-hue(@color; @diff){ 
    @hueAdjusted: spin(@color, @hueDiff);
}

/* Step 2: mixin to adjust the saturation difference */
.adjust-saturation(@color; @diff) when (@diff > 0){
    @satAdjusted: desaturate(@color, abs(@diff)); /* desaturate if diff is greater than 0 */
}
.adjust-saturation(@color; @diff) when not (@diff > 0){
    @satAdjusted: saturate(@color, abs(@diff)); /* saturate if diff is not greater than 0 */
}

/* Step 3: mixin to adjust the lightness diff between the colors */
.adjust-lightness(@color; @diff) when (@diff > 0){
    @lightnessAdjusted: darken(@color, abs(@diff)); /* darken if diff is greater than 0 */
}
.adjust-lightness(@color; @diff) when not (@diff > 0){
    @lightnessAdjusted: lighten(@color, abs(@diff)); /* else lighten */
}

div{
    .color-diff(@primary; @secondary);
    .adjust-hue(@primary; @hueDiff);
    .adjust-saturation(@hueAdjusted; @saturationDiff);
    .adjust-lightness(@satAdjusted; @lightnessDiff);
    color: @lightnessAdjusted; /* final output value */
}

编译后的CSS:

div {
    color1: #00643c;
    color2: #b9d732;
    color: #b9d732;
}

如果您只想获得两种颜色之间的差异,那么您可以使用如下所示的循环来输出色调、饱和度和亮度值的差异。

@color-list-1: rgb(0,100,60), #B0BCA7, #ABCDEF; /* list of primary colors */
@color-list-2: rgb(185,215,50), #BADA55, #FEDCBA; /* list of secondary colors */

#output{
    .loop-colors(@index) when (@index > 0){
        @primary: extract(@color-list-1, @index);
        @secondary: extract(@color-list-2, @index);
        .color-diff(@primary; @secondary);

        /* output the values of the comparison */
        color-comparison-@{index}+: ~"Hue Difference: @{hueDiff}";
        color-comparison-@{index}+: ~"Saturation Difference: @{saturationDiff}";        
        color-comparison-@{index}+: ~"Lightness Difference: @{lightnessDiff}";
        .loop-colors(@index - 1);
    }
    .loop-colors(length(@color-list-1));
}

上面的代码将比较两个列表中的相应值并输出它们的差异,如下所示:

#output {
  color-comparison-3: Hue Difference: -180, Saturation Difference: -29.142857142857153%, Lightness Difference: -5.882352941176478%;
  color-comparison-2: Hue Difference: -19.849624060150404, Saturation Difference: -50.70282063269439%, Lightness Difference: 10.196078431372548%;
  color-comparison-1: Hue Difference: -85.09090909090908, Saturation Difference: 32.65306122448979%, Lightness Difference: -32.352941176470594%;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定 HSL 变化以将一种颜色转换为另一种颜色 的相关文章

  • 通过 m2e 自动更新生成的 css 文件

    我正在使用lesscss maven plugin生成不同的css文件到目标目录 target generated sources 然后使用maven war plugin将此目录添加为 webResouce 这些文件将完美生成 但是 m2
  • 在 Mathematica 中创建具有不同颜色边的图形

    我想创建一个图 图论 其中某些边具有与其他边不同的颜色 这将用于突出显示图中从一个顶点到另一个顶点的路径 以下是一些具有不同颜色边缘的示例http demonstrations wolfram com AGraphTheoryInterpr
  • Android - 深色模式问题:深色背景上的黑色文本

    当我启用深色模式时 我的应用程序上的某些菜单看起来很糟糕 非常暗的背景上的黑色文本 我对颜色完全是一个初学者 我还没有接触过 android studio 上默认颜色设置的任何内容 所以我有默认的两个主题 XML 和 Color Xml
  • 让用户在深色和浅色模式之间进行选择(保存每个页面的设置,cookies?)

    我最近刚刚开始使用 javascript 和 jQuery 所以我不是专家 目前我正在努力解决我认为可以称为 基本任务 的问题 我想在主页上添加两个按钮 用户可以使用它们将网站模式设置为深色或浅色 当用户进入网站并单击不同的链接时 应该记住
  • 作为颜色表示的值

    将值转换为颜色是众所周知的 我确实理解以下两种方法 在改变 RGB 颜色值来表示一个值 https stackoverflow com questions 1423925 changing rgb color values to repre
  • python中旋转图像:推断背景颜色

    我使用以下 python 代码旋转图像 from PIL import Image img Image open banana jpg rotated img rotate 10 rotated save banana rotated jp
  • 如何创建热图来说明控制发散调色板中心颜色位置的网格差异?

    我有两个人脸 3D 网格 我希望使用热图来说明差异 我想使用红蓝发散色阶 我的数据可以查到here https github com Patricklv How to create heatmap illustraing 3D mesh d
  • opencv 视频上的颜色阈值

    I am thresholding for a color range in an opencv video The goal is to seperate the B mode black and white information on
  • 从壁纸中获取颜色? - 安卓

    如何找到当前壁纸的 平均 颜色并将该颜色设置为我的小部件上的布局 我正在尝试做的一个例子 这是 AccuWeather 上的设置 您可以使用WallpaperManager getWallpaperColors https develope
  • 在 Flutter 中更改深色模式的文本颜色(带有动态主题)?

    当我选择深色模式时 文本变成白色 但我想将所有文本设置为白色70或其他内容 包括按钮和常规文本 如何定义深色模式的默认文本颜色 我的主题数据现在是这样的 class MyApp extends StatelessWidget overrid
  • iOS 中的随机颜色

    我想让我的导航栏每次加载时都具有不同的颜色 我在 viewDidApear 中放置了以下代码 CGFloat hue arc4random 256 256 0 0 0 to 1 0 CGFloat saturation arc4random
  • 如何在Java中从一组选定的颜色中输出随机颜色? (安卓)

    因此 我希望每当用户输入答案时都为字符串赋予随机颜色 我的问题是 我不确定如何使字符串的随机颜色成为特定范围的颜色 例如 如果我希望字符串随机变成蓝色 红色 绿色 粉色 白色或棕色 只有这些颜色 没有其他颜色 到目前为止 我已经使用以下代码
  • Eclipse,在哪里更改当前调试行背景?

    任何人都可以向我指出具有以下设置的首选项页面DEBUG当前行背景颜色 我已经将几乎所有颜色更改为深色 但在调试时仍然对这个几乎白色的当前行指示器感到恼火 请注意 编辑模式下的当前行指示是可以的 好吧 现在我自己找到了它 通过主要的逆向工程
  • 如何修复此 YCrCb -> RBG 转换公式?

    我使用的公式来自这个问题 https stackoverflow com questions 8838481 kcvpixelformattype 420ypcbcr8biplanarfullrange frame to uiimage c
  • 每个刻度标签都有不同的颜色

    我正在尝试使用 matplotlib python 3 5 创建一个散点图 其中 x 轴上的每个刻度都有不同的颜色 这怎么可能 例如 假设 x 刻度为 Mo Tu We Th Fr Sa Su 现在我希望 Mo 是绿色的 Tu 是蓝色的 等
  • 简单的颜色变化

    我正在创建一个用户界面 用户可以在其中更改页面的颜色值 我想要的是获取分配给其背景颜色的值并将其变亮一定程度 我只是想获得一条亮点线 而不必每次都制作新图像 示例 用户将背景颜色设置为 ECECEC 现在我希望某个元素边框变成 F4F4F4
  • 在两种颜色之间进行插值的最有效方法是什么? (预计有伪代码和按位运算)

    制作一个黑莓应用程序 想要一个渐变类 插入两种颜色的最有效方法 例如速度和电池寿命 是什么 请具体说明 Java of course int c1 0xFFAA0055 color 1 ARGB int c2 0xFF00CCFF colo
  • JPEG 中的颜色配置文件检测

    我希望能够检测 JPEG 中是否存在颜色配置文件 需要明确的是 我对实际进行颜色校正或用它们做任何其他事情不感兴趣 我做了一些调查 但找不到任何明确的信息来源 到目前为止我所知道的是 里面有一个颜色配置信息XMP块 XMP 块位于0xFFE
  • Kivy - 有所有颜色名称的列表吗?

    在 Kivy 中 小部件 color属性允许输入其值作为字符串颜色名称 也 例如在 kv file Label color red 是否有所有可能的颜色名称的列表 就在这里 来自Kivy 的文档 https kivy org doc sta
  • 在 iPad 上显示 PDF 文档 - 颜色问题

    我为 iPad 构建了一个 PDF 阅读器 在将预览中的文档与模拟器和设备进行并排比较时 我注意到一些颜色问题 最好的形容就是颜色变得更加浓郁 近距离使用的相似颜色之间的任何差异都会变得更加明显 而所有颜色总体上看起来都更亮 尽管大肆宣传将

随机推荐

  • Go 中从 C 调用的整数除法

    我可以通过这个程序在 go 中执行整数除法 package main import fmt func main a 10 b 5 fmt Println a b 然后我用 go 编写了一个程序 其中包含 和 的函数 我用 C 编写了一个程序
  • 错误:非法重新分配导入

    我正在尝试将模块导入到打字稿文件中 然后与 Rollup js 捆绑在一起 但我收到一条错误消息 导致 Rollup 无法完成 进口 import as mapboxgl from mapbox gl mapboxgl as any acc
  • 如何扩展 JSX.IntrinsicElements['div']? TS2499

    我怎么可以通过创建一个新类型JSX IntrinsicElements div X但我不能延长它 我不明白错误消息 我不是简单地添加了一个 可选类型 吗 这两种不同的方式扩展类型有什么区别 对我有用的是预先定义类型 type SpanPro
  • Facebook 嵌入视频的 OpenGraph 遇到的困难

    我在实施通过研究找到的解决方案时遇到了一些困难here https stackoverflow com a 17811187 1467082 实际接受的答案没有帮助 已被投给玻利维亚 Problem Facebook 似乎无法识别我添加到标
  • 如何通过我的应用程序向服务器发送反馈信息?

    在我的应用程序中将使用反馈表 我必须将反馈信息发送到服务器 请帮助我如何在 Windows Phone 中将信息发送到服务器 您可以使用 EmailTask var emailTask new EmailComposeTask To ema
  • 计算字符串中所有字符的函数 - C++

    我想用C 写一个函数 计算字符串中的所有字符 我有一个名为 input 的字符串 程序的用户可以在其中输入一个句子 我将重要的字母存储在字符串字母表中 如下所示 string alphabet ABCDEFGHIJKLMNOPQRSTUVW
  • Xcode 8 无法启动:加载插件失败

    我的 Xcode 8 有一个大问题 无法启动 我总是收到以下错误 加载插件失败 该插件或其必备插件之一可能丢失或 已损坏 可能需要重新安装 我查看日志 发现问题出在 Python 所以我尝试更新 Python 重新安装 但没有什么问题 T
  • 可以通过 ISNUMERIC 函数过滤 Spark 数据帧吗?

    我有一个DataFrame对于 SQL 中的表 我想过滤这个DataFrame某一列的值是否为数字 val df sqlContext sql select from myTable val filter df filter ISNUMER
  • C++ - 如何从同一类的静态函数访问类的私有成员?

    我拥有的 所以我有一个带有私有成员和静态函数的类 该函数必须确实是静态的 我无法更改它 我想要的是 我需要从静态函数访问私有成员 有任何想法吗 请检查以下代码 class Base private int m member public B
  • 如何在 SQL 中将 Float 转换为 Varchar

    我正在做这个 declare num float 7708369000 select num as float convert varchar num as varchar 它给了我这个 float varchar 7708369000 7
  • 如何按 DESC 或 ASC 对 varchar 数字列进行排序?

    我写的 ORDER BY column ASC 但我的专栏是VARCHAR它有点像错误的1 10 2 代替1 2 10 我怎样才能做到像这样排序1 2 10 order by cast column as float Notes 假设您的列
  • 使用带有判别器的 C# MongoDB LINQ

    我有一个 MongoDB 集合 包含三个不同类 A B C 的文档 它们都继承自公共类 D 使用官方 C 驱动程序 我插入了所有三种类型 A B C 的文档 并且它们都通过 t 鉴别器正确显示 并且在我的代码中注册了它们的类映射 如果我发出
  • 序列信息缺失

    我正在使用 Spring Boot 应用程序 使用 com ibm db2 jcc DB2Driver 驱动程序和 Spring Data JPA 连接到 AS400 数据库 我使用 org hibernate dialect DB2Dia
  • TFCamemBERT 模型训练但测试没有结果

    目前我正在使用 Camembert 进行医学领域的命名实体识别 精确地使用以下模型 TF卡芒贝尔 https huggingface co jplu tf camembert base 然而 我在对任务模型进行微调时遇到了一些问题 因为我使
  • 使用编程约束时如何将 CAGradientLayer 添加到 UIView

    对于 Swift 中的 iOS 应用程序 我使用编程约束 并希望将 CAGradientLayer 添加到 UIView 下面是我的代码 它不起作用 import UIKit class ViewController UIViewContr
  • SDL:全屏半透明背景

    我正在尝试编写一个具有覆盖整个屏幕的半透明背景的程序 经过一些研究 SDL 似乎是最佳选择 我编写了代码来创建一个背景的全屏窗口 其 alpha 等于 100 满分 255 但由于某种原因它只绘制纯色 我做错了什么 Initialise S
  • 在 JSON.NET 中序列化 null

    通过 JSON NET 序列化任意数据时 任何为 null 的属性都会写入 JSON 如下所示 属性名称 空 这当然是正确的 但是我需要自动将所有空值转换为默认的空值 例如无效的strings 应该变成String Empty null i
  • PHP SimpleXML asXML写入ANSI编码文件

    我正在尝试将一些内容写入 XML 文件 但我确实遇到了特殊字符的问题 我想写的内容通过提交给脚本 GET 所以我假设它已正确解码为 UTF 8 内容 write GET content 将被喂食如下 file php content s F
  • Cordova 3.4 Android 本地视频文件无法播放

    我已经尝试了几天通过 cordova 3 4 应用程序在 Galaxy Tab 4 2 上播放本地视频文件 当我使用绝对 http url 时 视频播放得很好 这是我尝试过的 我将视频文件放入 asset res raw 文件夹中 如下所示
  • 确定 HSL 变化以将一种颜色转换为另一种颜色

    I use LESS 我想利用各种综合颜色函数 http lesscss org functions color operations允许仅设置几种基本颜色 然后派生其他变化色相 饱和度 亮度 旋转 ecc 假设我的着色器中有以下 2 种颜