Iv'e从xyz中找到了转换器,并发布了关于这些帖子的帖子。但对于彩色的"cd/m2"成分找不到很好的参考
您在问题中给出的坐标是CIE xyY(小x,小y,大y(,而不是CIE XYZ三刺激值(大x,大y,大Z(。两者之间的共同点是亮度Y。CIE xyY是从CIE XYZ沿着亮度Y轴的透视投影,以分离亮度和色度信息。
要从CIE xyY转换为HEX或RGB(sRGB(,您需要遵循以下路径:
CIE xyY->CIE XYZ->RGB->HEX
使用颜色,这种转换将表示如下:
import colour
xyY = [0.615, 0.346, 5.6]
XYZ = colour.xyY_to_XYZ(xyY)
RGB = colour.XYZ_to_sRGB(XYZ, apply_cctf_encoding=False)
print(RGB)
RGB_n = colour.utilities.normalise_maximum(RGB)
print(RGB_n)
print(colour.notation.RGB_to_HEX(colour.cctf_encoding(RGB_n)))
[ 23.33310243 0.88648 0.07921734]
[ 1. 0.03799238 0.00339506]
#fe360b
或使用最新开发的分支的自动颜色转换图
import colour
xyY = [0.615, 0.346, 5.6]
print(colour.convert(xyY, 'CIE xyY', 'Hexadecimal'))
.../colour/colour/utilities/verbose.py:237: ColourUsageWarning: "RGB" array contains values over 1 and will be normalised, unpredictable results may occur!
warn(*args, **kwargs)
#fe360b
请注意,由于您的颜色是高动态范围(HDR(,即Y=5.6,因此在从RGB转换为十六进制之前,如果不进行归一化处理,就无法将其转换为十六十进制表示。这里对颜色进行了归一化,使最大RGB值为1,但也值得考虑的是,您使用的是sRGB颜色,并将Y除以80,这是典型的sRGB显示峰值亮度。