js 中rgb色彩转换为Lab色彩

最近做 javaScript时候遇到了RGB 色彩模式转换为Lab色彩模式的问题,

结果寻找好久的转换算法都不能得到正确色彩,颇为苦恼。

不过后来看到 http://www.07net01.com/2015/12/1003437.html 这里的一个算法,于是拿来修改为 js能用的代码格式。用来还算顺手。现把代码贴出保存。


<span style="font-family: Arial, Helvetica, sans-serif;">var rgb2lab = function(R, G, B){</span>
	<span style="white-space:pre">	</span>var r = R / 255.000; // rgb range: 0 ~ 1
		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];
	};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值