【发布时间】:2018-02-18 01:48:44
【问题描述】:
我必须将 XYZ 转换为 HunterLab 颜色。我已经使用这个网站计算(http://www.easyrgb.com/en/math.php)尝试了下面的代码。问题是我没有得到确切的输出值。
在下面这个小提琴中,我选择了这个 HEX 颜色代码 ("#e33054")。我的 HunterLab 结果是 43.6862,63.8433,16.6580
当我与此站点 (http://www.color-hex.com/color/e33054) 进行比较时,输出 (43.6863, 63.8431, 16.6536) 值略有错误。
我附上了easyrgb.com网站的截图。我已经使用了下图中的大部分 X、Y、Z 值。如果我想显示正确的准确结果,我需要使用哪些 X、Y、Z 值。
$(document).ready(function() {
function RGBtoXYZ(R, G, B)
{
var_R = parseFloat( R / 255 )
var_G = parseFloat( G / 255 )
var_B = parseFloat( B / 255 )
if ( var_R > 0.04045 ) var_R = Math.pow(( ( var_R + 0.055 ) / 1.055 ), 2.4)
else var_R = var_R / 12.92
if ( var_G > 0.04045 ) var_G = Math.pow(( ( var_G + 0.055 ) / 1.055 ), 2.4)
else var_G = var_G / 12.92
if ( var_B > 0.04045 ) var_B = Math.pow(( ( var_B + 0.055 ) / 1.055 ), 2.4)
else var_B = var_B / 12.92
var_R = var_R * 100
var_G = var_G * 100
var_B = var_B * 100
//Observer. = 2°, Illuminant = D65
X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805
Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722
Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505
return [X, Y, Z]
}
function XYZtoHunter(X, Y, Z)
{
var_Ka = ( 175.0 / 198.04 ) * ( 100.000 + 98.03894 )
var_Kb = ( 70.0 / 218.11 ) * ( 100.000 + 118.1045 )
Hunter_L = 100.0 * Math.sqrt( Y / 100.000 )
Hunter_a = var_Ka * ( ( ( X / 98.03894 ) - ( Y / 100.000 ) ) / Math.sqrt( Y / 100.000 ) )
Hunter_b = var_Kb * ( ( ( Y / 100.000 ) - ( Z / 118.1045 ) ) / Math.sqrt( Y / 100.000 ) )
return [Hunter_L, Hunter_a, Hunter_b]
}
$("#flat").spectrum({
color: "#fff",
showInput: true,
preferredFormat: "hex6",
change: function(color) {
var xyz = color.toRgbString().replace('rgb(','');
var xyzclr = xyz.replace(')','');
var mystring = xyzclr;
var splits = mystring.split(",");
var bbb = RGBtoXYZ(splits[0], splits[1], splits[2]);
var ccc = XYZtoHunter(bbb[0], bbb[1], bbb[2]);
$(".hunterlb").text("Hunter Lab: " + ccc);
}
});
});
【问题讨论】:
标签: javascript jquery colors hex