我想将一些颜色值从众所周知的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),21296247,HSL and HSV,luma,Lightness,Munsell但未找到解决方案?
据我所知,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
如何进行此类转换?
任何提示都将受到欢迎 - 算法建议。
以下是执行HSLum的一些工具。
答案 0 :(得分:2)
如果您打算生成并使用感知统一颜色,您可以使用HSLuv,Alexei Boronine创建的库,可以使用多种编程语言。
它基于CIELUV colorspace并实现各种颜色转换例程,例如 rgbToHsluv , hsluvToRgb , hexToHsluv , hsluvToHex 等。
该库不支持从HSL到HSLuv的直接转换,但您可以按照here所述将HSL转换为RGB,然后使用rgbToHsluv。
答案 1 :(得分:1)
你可能会发现Charles Poynton的Gamma FAQ中的this link很有趣:
&#39; 22。 HSI,HSB,HLS和HSV中的I,B,L和V组件是什么?
为了使亮度的定义与物理功率成比例,HSI的I分量应表示线性光量。 CIE没有定义亮度的客观测量,但它显然是一个感知量。亮度是一种感知量,由CIE精确定义。 CIE尚未定义价值,但正在使用几种不同的定义,例如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以适应这些配方中的任何一种,并且这些配方的定义稍差。