论坛帮助 |
社区圈子 |
日历事件 |
2020-12-06, 19:39 | #1 | ||
|
|||
正式会员
等级: 三袋长老
|
function RGBtoLAB(R, G, B) { var r = R / 255.000; var g = G / 255.000; var b = B / 255.000; // gamma 2.2 if ( r > 0.04045 ){ r = Math.pow(( r + 0.055 ) / 1.055, 2.4); } else { r = r / 12.92; } if ( g > 0.04045 ){ g = Math.pow(( g + 0.055 ) / 1.055, 2.4); } else { g = g / 12.92; } if ( b > 0.04045 ){ b = Math.pow(( b + 0.055 ) / 1.055, 2.4); } else { b = b / 12.92; } // sRGB var X = r * 0.436052025 + g * 0.385081593 + b * 0.143087414; var Y = r * 0.222491598 + g * 0.716886060 + b * 0.060621486; var Z = r * 0.013929122 + g * 0.097097002 + b * 0.714185470; // XYZ range: 0~100 X = X * 100.000; Y = Y * 100.000; Z = Z * 100.000; // Reference White Point var ref_X = 96.4221; var ref_Y = 100.000; var ref_Z = 82.5211; X = X / ref_X; Y = Y / ref_Y; Z = Z / ref_Z; // Lab if (X > 0.008856){ X = Math.pow(X, 1/3.000); } else { X = ( 7.787 * X ) + ( 16 / 116.000 ); } if (Y > 0.008856){ Y = Math.pow(Y, 1/3.000); } else { Y = ( 7.787 * Y ) + ( 16 / 116.000 ); } if (Z > 0.008856){ Z = Math.pow(Z, 1/3.000); } else { Z = ( 7.787 * Z ) + ( 16 / 116.000 ); } var lab_L = ( 116.000 * Y ) - 16.000; var lab_A = 500.000 * ( X - Y ); var lab_B = 200.000 * ( Y - Z ); return [lab_L, lab_A , lab_B]; } alert(RGBtoLAB(100, 100, 100)); |
||
2020-12-06, 23:33 | 只看该作者 #2 | |||
|
||||
正式会员
等级: 六袋长老
|
这个就是lab色 不知道你的代码干嘛用的 但是搞印刷用的色域是cmyk,连rgb都用不全的,lab的色域更大,基本用不到, 即便有特殊需求用得到,显卡和显示器还受限制呢 https://baike.baidu.com/item/Lab%E9%...A8%A1%E5%9E%8B 详细看这里, |
|||
2020-12-07, 09:44 | 只看该作者 #3 | ||
|
|||
正式会员
等级: 三袋长老
|
引用:
|
||
2020-12-07, 12:00 | 只看该作者 #5 | |||
|
||||
正式会员
等级: 七袋长老
|
引用:
Public Function LABtoRGB(l, a, b, n) Dim fx, fy, fz, rr, gg, bb, r, g, B2 As Double fy = ((l + 16) / 116) ^ 3 If fy < 0.008856 Then fy = l / 903.3 Y = fy If fy > 0.008856 Then fy = fy ^ (1 / 3) Else fy = 7.787 * fy + 16 / 116 End If fx = a / 500 + fy If fx > 0.206893 Then x = fx ^ 3 Else x = (fx - 16 / 116) / 7.787 End If fz = fy - b / 200 If fz > 0.206893 Then z = fz ^ 3 Else z = (fz - 16 / 116) / 7.787 End If x = x * (0.950456 * 255) Y = Y * 255 z = z * (1.088754 * 255) rr = 3.240479 * x - 1.53715 * Y - 0.498535 * z gg = -0.969256 * x + 1.875992 * Y + 0.041556 * z bb = 0.055648 * x - 0.204043 * Y + 1.057311 * z r = IIf(rr < 0, 0, IIf(rr > 255, 255, rr)) g = IIf(gg < 0, 0, IIf(gg > 255, 255, gg)) B2 = IIf(bb < 0, 0, IIf(bb > 255, 255, bb)) If n = 1 Then arr = Array(r, g, B2) LABtoRGB = arr(0) End If If n = 2 Then arr = Array(r, g, B2) LABtoRGB = arr(1) End If If n = 3 Then arr = Array(r, g, B2) LABtoRGB = arr(2) End If End Function 说明:1,是R;2,是G,3 是B |
|||
右列会员因为此帖价值甚高向 重庆印刷工 表示感谢: |
yzx0120 (2020-12-11)
|