当转换为浮动sRGB时,CIELAB会增加饱和度

时间:2016-05-20 16:21:21

标签: python colors

我正在使用colormatch for python将CIE L * a * b *转换为sRGB

输入:

(lab_l=70.0,lab_a=60.0,lab_b=0.0)

输出:

(1.0458503175786145, 0.47183611022803823, 0.682521668019042)

但是,1.045 ...超出范围12个字节。这是预期的行为吗?

1 个答案:

答案 0 :(得分:1)

L * a * b *的色域宽于sRGB,因此转换溢出是正常的。

L * a * b *可以代表每种可感知的颜色,但是0≤r,g,b≤1范围内的sRGB只是一个小子集。你的颜色就在这个子集之外。

(另见Boundaries of the visible gamut in a CIE color space

如果你不喜欢溢出,你可以使用clamped_rgb_r, etc properties来获取[0.0,1.0]范围内剪切的值,为explained in the documentation on Color Conversion

  

RGB空间的色域往往比某些CIE色彩空间小。转换为RGB时,这可能会导致某些坐标超出可接受的范围(0.0-1.0或1-255,具体取决于您的RGB颜色是否已升级)。

     

我们不按原样对待这些内容,而是将它们保留原样。这允许更准确地转换回CIE颜色空间。如果需要钳制(0.0-1.0或1-255)值,请对任何RGB颜色使用以下属性:

     
      
  • clamped_rgb_r
  •   
  • clamped_rgb_g
  •   
  • clamped_rgb_b
  •   

示例:

from colormath import color_objects, color_conversions

lab_color = color_objects.LabColor(lab_l=70.0, lab_a=60.0, lab_b=0.0)
rgb_color = color_conversions.convert_color(lab_color, color_objects.sRGBColor)
print(repr(rgb_color))
# sRGBColor(rgb_r=1.045850317578614,rgb_g=0.47183611022803845,rgb_b=0.6825216680190419)
print((rgb_color.clamped_rgb_r, rgb_color.clamped_rgb_g, rgb_color.clamped_rgb_b))
# (1.0, 0.47183611022803845, 0.6825216680190419)