将 HSB/HSV 颜色转换为 HSL

2024-03-30

如何将 HSB 颜色转换为 HSL?

Photoshop 在其颜色选择器中显示 HSB 颜色。 HSB 颜色不能在 CSS 中使用,但 HSL 可以。

我尝试了这个JS:


function hsb2hsl(h, s, b) {
  return {
    h: h,
    s: s,
    l: b-s/2
  }
}
  

But hsb2hsl(0, 100, 50).l == 0代替25

Update:我可以在不转换 HSB → RGB → HSL 的情况下做到这一点吗?


简短但精确

试试这个([0,1]中的s,v,l,更多:hsv2rgb https://stackoverflow.com/a/54024653/860099 rgb2hsv https://stackoverflow.com/a/54070620/860099 and hsl2rgb https://stackoverflow.com/a/54014428/860099 rgb2hsl https://stackoverflow.com/a/54071699/860099)

let hsl2hsv = (h,s,l,v=s*Math.min(l,1-l)+l) => [h, v?2-2*l/v:0, v];

let hsv2hsl = (h,s,v,l=v-v*s/2, m=Math.min(l,1-l)) => [h,m?(v-l)/m:0,l];
let hsv2hsl = (h,s,v,l=v-v*s/2,m=Math.min(l,1-l)) => [h,m?(v-l)/m:0,l];
let hsl2hsv = (h,s,l,v=s*Math.min(l,1-l)+l) => [h, v?2-2*l/v:0, v];

console.log("hsv:["+ hsl2hsv(30,1,0.6) +"] hsl:["+ hsv2hsl(30,0.8,1) +"]");


// -------------------
// UI code
// -------------------

let $ = x => document.querySelector(x);
let c = (x,s) => $(x).style.backgroundColor=s;
let hsl=[0,1,0.5];
let hsv=hsl2hsv(...hsl);

let refreshHSV =(i,e) => {
   hsv[i]= e.target.value/(i?100:1);
   hsl=hsv2hsl(...hsv);
   refreshView();
}

let refreshHSL =(i,e) => {
   hsl[i]= e.target.value/(i?100:1);
   hsv=hsl2hsv(...hsl);  
   refreshView();
}

let hsv2rgb = (h,s,v) => {                              
  let f= (n,k=(n+h/60)%6) => v - v*s*Math.max( Math.min(k,4-k,1), 0);     
  return [f(5),f(3),f(1)];       
}

let refreshView = () => {
   let a= [hsl[0], (hsl[1]*100).toFixed(2), (hsl[2]*100).toFixed(2)]; 
   let b= [hsv[0], (hsv[1]*100).toFixed(2), (hsv[2]*100).toFixed(2)]; 
   
   let r= hsv2rgb(...hsv).map(x=>x*255|0);
   let ta= `hsl(${a[0]},${a[1]}%,${a[2]}%)`
   let tb= `hsv(${b[0]},${b[1]}%,${b[2]}%)`
   let tr= `rgb(${r[0]},${r[1]},${r[2]})`
   
   c('.hsl', tr);   
   $('#sv').value=hsv[1]*100;
   $('#v').value =hsv[2]*100;
   $('#sl').value=hsl[1]*100;
   $('#l').value =hsl[2]*100;
   $('.info').innerHTML=`${tr}\n${tb}\n${ta.padEnd(25)}`;   
}



refreshView();
.box {
  width: 50px;
  height: 50px;
  margin: 20px;
}

body {
    display: flex;
    background: white;
}
<div>
<input id="h" type="range" min="0" max="360" value="0" oninput="refreshHSV(0,event)">Hue<br>
<div class="box hsl"></div>
<pre class="info"></pre>
</div> 

<div>
<input id="sv" type="range" min="0" max="100" value="0" oninput="refreshHSV(1,event)">HSV Saturation<br>
<input id="v" type="range" min="0" max="100" value="100" oninput="refreshHSV(2,event)">HSV Value<br><br><br>
<input id="sl" type="range" min="0" max="100" value="0" oninput="refreshHSL(1,event)">HSL Saturation<br>
<input id="l" type="range" min="0" max="100" value="100" oninput="refreshHSL(2,event)">HSL Lightness<br>
</div>

该代码基于我发现并编写的公式wiki https://en.wikipedia.org/wiki/HSL_and_HSV#Interconversion

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 HSB/HSV 颜色转换为 HSL 的相关文章

随机推荐

  • 监控 Android 手机中的网络活动

    我想监控我的 Android 手机的网络流量 我正在考虑在 Android 上使用 tcpdump 但我不确定是否必须为手机进行交叉编译 另一个问题是 如果我想监控某个应用程序的流量数据 有什么命令可以做到这一点吗 TCPDUMP 是我最喜
  • 当 url 模式是路径时,无法让 Spring MVC 调度程序正常工作

    我有一个网络应用程序 目前我们正在将 Spring MVC 应用到 REST 服务 我们希望我们的休息服务出现在 contextPath rest 但是当我设置这个时 我们得到 在名称为 Spring MVC Dispatcher Serv
  • 如何使用另一个数据库(非默认数据库)中的 auth_user?

    我有两个数据库 默认数据库和示例数据库 我想用auth user来自示例数据库而不是来自默认数据库的表 默认情况下 它是从默认数据库获取的 我想在我的模型文件中指定它 以便我可以在我的视图中访问 这怎么可能 DATABASES defaul
  • 在Python中创建饼图

    我已经创建了饼图 但现在我正在使用一系列单元格 如下所示 chart3 add series name Pie data categories Pivots A 3 A 10 values Pivots F 3 F 10 这为我提供了一个饼
  • 按列对多维关联数组进行排序并保留第一级键

    我有一个看起来像这样的数组 this gt wordswithdata team1 gt points gt 10 players gt team2 gt points gt 23 players gt 我想按照每支球队的得分从高到低对球队
  • 新的 ms botbuilder 直线语音是否适合呼叫中心场景?

    MS 最近推出了直接语音通道以及一些供 Web 前端使用它的示例 但我想知道它是否适合在使用某些 SIP 或 twilio 电话等服务的呼叫中心场景中使用 如果是这样 我想看看一些文档如何使用直线语音 api 并将其连接到某些电话 我已经创
  • Linux 上的 cp + git 基准测试与 Linux 上的基准测试Windows:为什么会有这样的差异?

    我用这个创建了大量文件Python脚本 https gist github com nowox fd62b89b69ea730f3dbd0969e7693fbe我主要用它来对 Git 进行基准测试 结果非常令人惊讶 尤其是 Windows
  • 如何更改 ASP.NET Core API 中的默认控制器和操作?

    我正在创建一个 ASP NET Core API 应用程序 目前 当创建一个新项目时 会有一个名为 Values 的控制器 默认情况下 API 会在您运行时打开它 因此 我删除了该控制器并添加了一个名为 Intro 的新控制器 并在其中添加
  • pyodbc rowcount 只返回 -1

    行计数如何工作 我正在使用 pyodbc 它总是返回 1 return query conn query db param query q params print return query rowcount def query db pa
  • MSBuild 构建前步骤

    我昨天问了关于获得AfterBuild工作并能够通过将其放置在最底部来使其工作Project部分 MSBuild AfterBuild 步骤 https stackoverflow com q 26760052 2642059 我在不同的项
  • 无法在 websphere 8.5 上启动应用程序,但在版本 7 上运行

    我遇到了一个特殊的问题 我有一个包含 ejb jar 的 Ear 应用程序在 websphere 7 上独立运行 我下载了 8 5 试用版 创建了一个垂直集群并在其上安装了应用程序 但该应用程序在 8 5 版本上尚未启动 每次我尝试启动它时
  • 如何删除头部?

    我错误地推送了一些文件 它在主存储库中显示了不同的头 我怎样才能删除那个头 您可以通过编辑您的文件来启用 mq 扩展 hgrc文件 确保存在以下行 extensions mq 之后 您可以 剥离 特定修订版 将其删除 这样您就只有一个头 h
  • 测试依赖于 NUnit 的常用功能

    我有一些初始化代码来使用我的 API 初始化可能会失败 我想在 NUnit 测试中测试它 初始化之后就可以使用API 了 我也在测试 API 但我所有的测试方法都将使用相同的 通用的初始化代码 我理想的情况是这种行为 运行初始化测试 如果
  • Java 8 流 - 超时?

    我想循环一个巨大的数组并执行一组需要很长时间的复杂指令 但是 如果超过 30 秒 我希望它放弃 ex final long start System currentTimeMillis myDataStructure stream whil
  • Swift 数字和 CGFloat(CGPoint、CGRect 等)

    我发现 Swift 数字特别笨拙 就像现实生活中经常发生的那样 我必须与 Cocoa Touch 就 CGRect 和 CGPoint 进行交流 例如 因为我们正在谈论某事frame or bounds CGFloat 与 Double 考
  • 尝试在 Maven 中构建具有嵌入式依赖项的 OSGi 包。似乎无法从 BND 类路径中排除传递依赖项

    基本上 我的 Web 服务必须可部署为单个 OSGi jar 包 所以 该包必须包含所有编译和运行时 Maven 依赖项 它还必须包含依赖于这些依赖项的所有非可选依赖项 即传递依赖项 我正在尝试使用 maven bundle plugin
  • 使用 java.util.TimeZone 查找 DST 转换时间戳

    是否可以使用 Java Calendar Date TimeZone API 获取上一个和下一个 DST 转换时间戳 With Joda Time我可以写 DateMidnight today new DateMidnight 2009 2
  • 无法在浏览器中显示希腊字母

    我正在使用 html 和 css 开发一个网站 但我看不到希腊字母 相反 我只看到符号 我的 html 文件中有以下行 我也尝试过
  • Backbone.js 控制器中的默认路由?

    我想为我的backbone js 控制器设置默认路由 目前我是这样做的 class DealSearchController extends Backbone Controller routes list showListView phot
  • 将 HSB/HSV 颜色转换为 HSL

    如何将 HSB 颜色转换为 HSL Photoshop 在其颜色选择器中显示 HSB 颜色 HSB 颜色不能在 CSS 中使用 但 HSL 可以 我尝试了这个JS function hsb2hsl h s b return h h s s