【问题标题】:How to convert HSL (hue, saturation, lightness) to HSLum (hue, saturation, luminance) and HSLum/RGB?如何将 HSL(色调、饱和度、亮度)转换为 HSLum(色调、饱和度、亮度)和 HSLum/RGB?
【发布时间】:2014-07-05 04:08:11
【问题描述】:

我想将一些颜色值从众所周知的 HSL 转换为鲜为人知的 HSLum 怎么做?

hsl(0, 1.0, 0.5) - rgb red  is hslum(0, 1.0., 0.54)
hsl(120, 1.0, 0.5 - rgb green is hslum(0, 1.0, 0.80)
hsl(240, 1.0, 0.5) - rgb blue is hslum(0, 1.0, 0.44)

据我所知,亮度(不是亮度)是这样计算的:

Y = 0.2126 * R + 0.7152 * G + 0.0722 * B

我看了一些文章:Luminance (relative)21296247HSL and HSVlumaLightnessMunsell,但没有找到解决方案?

据我所知,CIELab 1976 公式接近Munsell

1.16*(Y/Ymax)^1.16*(Y/Ymax)^(1.0/3.0)-0.16 where Y/Ymax > 0.01

或者更好的插值/

1.16*(Y/Ymax)^(1.0/3.0)-0.16 where Y/Ymax > (6/29)^3
1.16*(841.0/108.0)*(Y/Ymax)+(4.0/29.0)-0.16 where Y/Ymax <= (6/29)^3

如何进行此类转换?

  1. HSL -> HSLum
  2. HSLum -> HSL
  3. HSLum -> RGB

欢迎任何提示 - 算法建议。

这里有一些工具在做HSLum

【问题讨论】:

  • 您是否找到了执行给定转换的算法?我需要 HSLum 到 HSL 的转换,但这里没有最终答案...

标签: graphics colors color-scheme luminance


【解决方案1】:

如果您打算生成和使用感知统一的颜色,您可以使用HSLuv,这是一个由Alexei Boronine 创建的库,可用于多种编程语言。

它基于CIELUV colorspace,实现了各种颜色转换例程,如rgbToHsluvhsluvToRgbhexToHsluvhsluvToHex

该库不支持从 HSL 直接转换为 HSLuv,但您可以按照 here 的说明将 HSL 转换为 RGB,然后使用 rgbToHsluv。

【讨论】:

  • 嗨,我刚刚尝试使用 HSLuv (javascript) 没有成功。无法访问转换函数,我得到“未捕获的 ReferenceError:未定义 hexToHsluv”,我在网上找不到任何关于此错误的信息。你在工作中使用过这个库吗?谢谢!
  • @IulianAnghel:几年前我确实在一个测试项目中使用过这个库,它工作得很好(据我记得)。您的错误表明您正在尝试直接调用hexToHsluv 而不是hsluv.hexToHsluv。如果不是这种情况,我建议您尝试直接联系开发人员。您可以在 HSLuv 的实现页面 (hsluv.org/implementations) 上找到相应的邮件地址。
  • 嗨@xpages-noob,谢谢你的回答!我正在调用 hsluv.hexToHsluv,但由于某种原因它几天没有工作 - 甚至要求一个 js 开发团队伙伴尝试它。一周后我尝试了它,它奏效了。我不知道出了什么问题。再次感谢!
【解决方案2】:

您可能会发现 Charles Poynton 的 Gamma FAQ 中的 this link 很有趣:

'22. HSI、HSB、HLS 和 HSV 中的 I、B、L 和 V 分量是什么?

为了符合亮度与物理功率成正比的定义,HSI 的 I 分量应表示线性光量。 CIE 没有定义亮度的客观度量,但它显然是一个感知量。亮度是 CIE 非常精确地定义的感知量。 CIE没有定义Value,但是有几个不同的定义在使用,比如Munsell Value,都是有感知基础的,可以和亮度相媲美。

在计算机图形学中使用的大多数 HSI、HSB、HLS 和 HSV 公式中,这些量是根据 R、G 和 B 主分量计算的,但没有参考主分量中的非线性,即原色与线性光的关系。因此无法确定计算出的HSI、HSB、HLS或HSV是代表物理量还是感知量。

HSI、HSB、HLS 和 HSV 的亮度分量应基于亮度,计算为红色、绿色和蓝色的适当加权总和。但是在通常的公式中,亮度分量被计算为三个分量的最大值,或者三个分量的最小值和最大值的平均值。这种高度非线性的计算将辐条引入色调圈。

最后,从 HSI、HSB、HLS 或 HSV 转换而来的 RGB 三元组产生的颜色取决于 RGB 原色的色度,但 HSI、HSB、HLS 或 HSV 的常用公式均未将原色度转换为帐户。

由于这些原因,I、B、L 和 V 量在计算机图形中的任何使用都是值得怀疑的。详情请见Frequently Asked Questions about Color

我认为这意味着在所有情况下,您必须转换为 RGB 才能在这些公式中的任何一个之间切换,而且这些公式的定义有些不明确。

【讨论】:

  • pHSL、HSL、HSV 是颜色选择的某种简化——它不能很好地表示颜色,但可以很好地设计一些调​​色板。均匀的发光有助于平衡颜色,如孟塞尔方案中侧重于主观感知的方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
  • 2023-03-25
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
相关资源
最近更新 更多