我正在使用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个字节。这是预期的行为吗?
答案 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)