我正在尝试用 python 编写一个简单的 CLI 工具,用于查找一组波长,当转换为 RGB 然后组合时,它们接近输入的 RGB 颜色。
我找不到一个好的方法来做到这一点,但我找到了很多方法来进行相反的操作。
我最好有能够生成表示颜色所需的最少量波长的代码,例如对于蓝色,您只需要 1 个,对于其他一些可能需要 2 个。
听起来主波长可能对您有用?
几乎没有任何 RGB 值可以代表纯波长的颜色(绝对不是 sRGB),无论它们如何组合,但您可以计算它们的主波长和激发纯度。
有一个 python 颜色库可以计算这些,以及我自己的 .NET Unicolour 库。我还写了一些有关波长和纯度的详细信息here。
关于“一组波长”,这很棘手。每种颜色都可以由无限不同的光谱功率分布生成(同色异谱)。主波长可能是一个有用的起点(即单个波长的光谱功率分布)。
有一篇论文(Physically Meaningful Rendering using Tristimulus Colours)试图将 sRGB 转换为光谱,但它的目标是生成一个“尽可能类似于自然光谱”的分布,这听起来与你的想法不一致试图做。然而,看起来 python 颜色库也实现了(如果它有用的话)。