这是一个非常明确的问题,但我做了很多研究并没有找到答案。 StackOverflow问题this或this是关于jpeg转换的。 This是关于python内置库的。
那么,如何将sRGB转换为AdobeRGB,反之亦然???我的意思是一个数学函数,将3个字节转换为3个字节。没有jpges,等等。只需数学功能即可使用笔和纸转换颜色。
是的,photoshop实际上是这样做的,并且有一些奇怪的在线计算器,显示另一个结果。
为什么我不能在google中找到一个简单的公式?
我开始思考,我不知道什么,我的问题没有直接答案。
如果有人可以描述,正在发生什么或给出公式,我将非常感激。
更新
整数rgbs的大量结果也是正确答案。
答案 0 :(得分:3)
这是实现公式的Python代码。如注释中所述,您将从一个颜色空间转换为XYZ(标准化),然后从XYZ转换为新的颜色空间。我对这些功能的准确性并不是百分之百满意,但它应该会让你大吃一惊。当我提出改进时,我会将它们编辑成答案。
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
答案 1 :(得分:1)
它有点复杂,所以如果你需要公式,请阅读规格表。
sRGB(PDF)
https://www.w3.org/Graphics/Color/srgb
Adobe RGB(2004年10月12日草稿)(PDF)
http://www.color.org/adobergb.pdf
Adobe RGB(1998)(PDF)
https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf
Wiki也很好
sRGB的
https://en.wikipedia.org/wiki/SRGB_color_space
Adobe RGB
https://en.wikipedia.org/wiki/Adobe_RGB_color_space
要进行测试,请检查颜色转换设置 可能会发生软件特定转换 (主要是如果超出范围,但在某些情况下,不会超出范围值也会受到影响)
离。
Photoshop颜色设置
http://help.adobe.com/en_US/creativesuite/cs/using/WS6A727430-9717-42df-B578-C0AC705C54F0.html#WS6078C298-CB20-4dc8-ACD4-D344110AA026
关于渲染意图
感性
旨在保持颜色之间的视觉关系......即使颜色值本身可能会改变。
使用XYZ在转换到其他颜色空间方面比直接(在sRGB和Adobe RGB之间)转换更灵活。
RGB色彩空间
https://en.wikipedia.org/wiki/RGB_color_space
sRGB和XYZ之间的转换包含非线性操作 因此,sRGB和Adobe RGB之间的直接转换很困难。
请参阅sRGB wiki中转换部分的规范。 (反向转换部分。)
来自规格表
如果R,G,B小于或等于0.04045
RL = R / 12.92
...
如果R,G,B大于0.04045
RL =((R + 0.055)/1.055) ^ 2.4
......
RL为线性(XYZ(D65)),R为该公式中的sRGB 绿色和蓝色也有相同的公式。
不阻止其他色彩空间之间的直接转换,但是,
Adobe RGB和XYZ之间的转换也包含非线性操作。
(四舍五入到。)
更确切地说,它是Adobe RGB(浮点值)到Adobe RGB(在int值中)转换。
注意:他们的预期白点不同
(因为目的不同。显示的sRGB,照片的Adobe RGB。)
规格表中的转换矩阵适用于D65(sRGB)和D50或D65(Adobe RGB)。
我们应该考虑三件事 RGB值本身,显示的值范围(和颜色的正确性)以及查看环境。
实施例
1.转换矩阵(和其他公式):RGB值
2.显示白点和黑点:显示值范围
3.环境照明色度:观看环境
只有1(矩阵和公式)在转换值时有效,
但是2和3也很重要,因为它们决定了我们如何看到RGB值
注意:使用ICC配置文件时,如果存储了2(显示设置),则它会依赖。
如果显示范围窄于RGB值可以表示,它们将被剪裁(显示时) 如果范围不合适,白色或黑色可能会显示为灰色等。
如果环境照明色度不同于一个转换矩阵并且公式是用于,我们将看到不同的颜色。
转换矩阵
(这很重要,因为它对RGB转换值有影响。)
(显示转换矩阵适用于D65。)
- 从XYZ( D65 )转换为线性sRGB值
醇>
在Adobe RGB(1998)规格表中,存在两种类型的转换矩阵(和公式)
4.3.1~(无ICC):D65
4.3.6~(与ICC):D50
来自Adobe RGB(1998)
(对于具有ICC配置文件等的图像)
4.3.6在24位Adobe RGB(1998)中编码ICC PCS版本2值 4.3.6.1将XYZ转换为RGB三刺激值
注:上述矩阵源自色空间色度坐标,以及对CIE标准光源<色> D50 的色彩适应性轮廓连接空间(XYZ PCS v2)中的XYZ三刺激值0.0000,0.0000,0.0000应 对应于参考显示黑点。 XYZ三刺激值0.9642,1.000,0.8249应对应于参考显示白点。
注意:警告白色不是(1.0,1.0,1.0)。
来自Adobe RGB(1998)
(对于没有ICC配置文件等的图像)
这对于计算可能是好的(并且sRGB的白点是预先知道的(并且它是D65))。
4.3.1 Adobe RGB(1998)色彩空间和彩色图像编码
色空间色度和亮度
红色x = 0.6400,y = 0.3300
绿色x = 0.2100,y = 0.7100
蓝色x = 0.1500,y = 0.0600
白色x = 0.3127,y = 0.3290
色空间白点应等于参考显示白点 色空间黑点应等于参考显示黑点。
注意:白色(x = 0.3127,y = 0.3290)对应 D65 。
(参见4.2.1参考显示白点一节。)
环境照明色度
(不要与显示白点混淆。这会影响我们可以看到的颜色正确性。)
来自Adobe RGB(草稿)
3.1.4参考查看条件
4.参考环境白点x = 0.3457,y = 0.3585(D50)
来自Adobe RGB(1998)
附件B.
环境照明色度:......环境照明 色度可以是D65到D50 ......
显示白点
(不要与环境照明色度混淆。这是关于显示器可以显示的范围。)
来自sRGB
- 参考显示白点色度: x = 0.3127,y = 0.3290,z = 0.3583(相当于 CIE Illuminant D65的色度。
醇>
来自Adobe RGB(1998)
来自Adobe RGB(1998)的4.2.1参考显示白点
注意色度坐标对应于CIE标准光源D65。
(供参考。)
附件A. 来自Adobe Systems的Adobe RGB(1998)ICC配置文件是Adobe RGB(1998)彩色图像编码的实例。
来自sRGB
- 色度适应并转换为ICC XYZ PCS
醇>示例:如果选择D65作为sRGB改编为白色,则为chro matic自适应变换将从D65变为D50,得到的D50值将被编码在mediaWhitePoint标签中 ...
但是,如果选择D50作为sRGB改编为白色, 不需要色彩适应 ...
IEC 61966-2-1未规定sRGB参考显示适应白点的色度。
(注意:sRGB在IEC 61966-2-1中定义)
这意味着没有定义哪个白色(D65等)用于显示sRGB,因此将其存储在ICC配置文件中。
标准光源(维基)(仅供参考。不属于此转换。)
https://en.wikipedia.org/wiki/Standard_illuminant