gpt4 book ai didi

adobe - sRGB 和 Adob​​eRGB 的数学转换

转载 作者:行者123 更新时间:2023-12-03 03:21:09 24 4
gpt4 key购买 nike

这是一个非常明确的问题,但我做了很多研究,但没有找到答案。 StackOverflow 问题为 thisthis是关于 jpeg 转换的。 This是关于 python 内置库的。

那么,如何将 sRGB 转换为 Adob​​eRGB,反之亦然???我的意思是一个数学函数,将 3 个字节转换为 3 个字节。没有jpg,等等。只是使用笔和纸转换颜色的数学函数。

是的,Photoshop 确实做到了这一点,并且有一些奇怪的在线计算器,显示了另一个结果。

为什么我在 google 中找不到简单的公式?

我开始思考,我不知道某些事情,而且我的问题没有直接答案。

如果有人能描述发生了什么或给出公式,我将非常感激。

更新

整数 rgbs 的大数组结果也是正确的答案。

最佳答案

这里是实现这些公式的 Python 代码。如注释中所述,您从一种颜色空间转换为 XYZ(标准化),然后从 XYZ 转换为新的颜色空间。我对这些函数的准确性不是 100% 满意,但它应该能让您大致了解。当我提出改进时,我会将它们编辑到答案中。

def linear_sRGB(c):
if c <= 0.04045:
return c / 12.92
else:
return pow((c + 0.055) / 1.055, 2.4)

def sRGB_to_XYZn(r, g, b):
Rlin = linear_sRGB(r / 255.0)
Glin = linear_sRGB(g / 255.0)
Blin = linear_sRGB(b / 255.0)
Xn = Rlin * 0.4124 + Glin * 0.3576 + Blin * 0.1805
Yn = Rlin * 0.2126 + Glin * 0.7152 + Blin * 0.0722
Zn = Rlin * 0.0193 + Glin * 0.1192 + Blin * 0.9505
return Xn, Yn, Zn

def gamma_sRGB(c):
if c <= 0.0031308:
return 12.92 * c
else:
return 1.055 * pow(c, 1/2.4) - 0.055

def XYZn_to_sRGB(Xn, Yn, Zn):
Rlin = Xn * 3.2406255 + Yn *-1.5372080 + Zn *-0.4986286
Glin = Xn *-0.9689307 + Yn * 1.8757561 + Zn * 0.0415175
Blin = Xn * 0.0557101 + Yn *-0.2040211 + Zn * 1.0569959
R = round(255 * gamma_sRGB(Rlin))
G = round(255 * gamma_sRGB(Glin))
B = round(255 * gamma_sRGB(Blin))
return R, G, B

def linear_AdobeRGB(c):
if c <= 0.0:
return 0.0
return pow(c, 2.19921875)

def AdobeRGB_to_XYZn(R, G, B):
Rlin = linear_AdobeRGB(R / 255.0)
Glin = linear_AdobeRGB(G / 255.0)
Blin = linear_AdobeRGB(B / 255.0)
Xn = Rlin * 0.57667 + Glin * 0.18556 + Blin * 0.18823
Yn = Rlin * 0.29734 + Glin * 0.62736 + Blin * 0.07529
Zn = Rlin * 0.02703 + Glin * 0.07069 + Blin * 0.99134
return Xn, Yn, Zn

def gamma_AdobeRGB(c):
if c <= 0.0:
return 0.0
return pow(c, 1/2.19921875)

def XYZn_to_AdobeRGB(Xn, Yn, Zn):
Rlin = Xn * 2.04159 + Yn *-0.56501 + Zn *-0.34473
Glin = Xn *-0.96924 + Yn * 1.87597 + Zn * 0.04156
Blin = Xn * 0.01344 + Yn *-0.11836 + Zn * 1.01517
R = round(255 * gamma_AdobeRGB(Rlin))
G = round(255 * gamma_AdobeRGB(Glin))
B = round(255 * gamma_AdobeRGB(Blin))
return R, G, B

关于adobe - sRGB 和 Adob​​eRGB 的数学转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40017741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com