📄 colorspace.js
字号:
"CMY":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["Luv"]["XYZ"](cMaps["LCHuv"]["Luv"](obj), kwArgs), kwArgs).toCmy(); }, "CMYK":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["Luv"]["XYZ"](cMaps["LCHuv"]["Luv"](obj), kwArgs), kwArgs).toCmyk(); }, "HSL":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["Luv"]["XYZ"](cMaps["LCHuv"]["Luv"](obj), kwArgs), kwArgs).toHsl(); }, "HSV":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["Luv"]["XYZ"](cMaps["LCHuv"]["Luv"](obj), kwArgs), kwArgs).toHsv(); }, "Lab":function(obj, kwArgs){ return cMaps["XYZ"]["Lab"](cMaps["Luv"]["XYZ"](cMaps["LCHuv"]["Luv"](obj), kwArgs), kwArgs); }, "LCHab":function(obj, kwArgs){ return cMaps["Lab"]["LCHab"](cMaps["XYZ"]["Lab"](cMaps["Luv"]["XYZ"](cMaps["LCHuv"]["Luv"](obj), kwArgs), kwArgs), kwArgs); }, "Luv":function(obj, kwArgs){ return cMaps["LCHuv"]["Luv"](obj, kwArgs); }, "RGB":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["Luv"]["XYZ"](cMaps["LCHuv"]["Luv"](obj), kwArgs), kwArgs); }, "XYZ":function(obj, kwArgs){ return cMaps["Luv"]["XYZ"](cMaps["LCHuv"]["Luv"](obj), kwArgs); }, "xyY":function(obj, kwArgs){ return cMaps["XYZ"]["xyY"](cMaps["Luv"]["XYZ"](cMaps["LCHuv"]["Luv"](obj), kwArgs), kwArgs); }, }, "Luv":{ "CMY":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["Luv"]["XYZ"](obj, kwArgs), kwArgs).toCmy(); }, "CMYK":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["Luv"]["XYZ"](obj, kwArgs), kwArgs).toCmyk(); }, "HSL":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["Luv"]["XYZ"](obj, kwArgs), kwArgs).toHsl(); }, "HSV":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["Luv"]["XYZ"](obj, kwArgs), kwArgs).toHsv(); }, "Lab":function(obj, kwArgs){ return cMaps["XYZ"]["Lab"](cMaps["Luv"]["XYZ"](obj, kwArgs), kwArgs); }, "LCHab":function(obj, kwArgs){ return cMaps["Lab"]["LCHab"](cMaps["XYZ"]["Lab"](cMaps["Luv"]["XYZ"](obj, kwArgs), kwArgs), kwArgs); }, "LCHuv":function(obj, kwArgs){ return cMaps["Luv"]["LCHuv"](obj, kwArgs); }, "RGB":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["Luv"]["XYZ"](obj, kwArgs), kwArgs); }, "XYZ":function(obj, kwArgs){ return cMaps["Luv"]["XYZ"](obj, kwArgs); }, "xyY":function(obj, kwArgs){ return cMaps["XYZ"]["xyY"](cMaps["Luv"]["XYZ"](obj, kwArgs), kwArgs); }, }, "RGB":{ "CMY":function(obj, kwArgs){ return obj.toCmy(); }, "CMYK":function(obj, kwArgs){ return obj.toCmyk(); }, "HSL":function(obj, kwArgs){ return obj.toHsl(); }, "HSV":function(obj, kwArgs){ return obj.toHsv(); }, "Lab":function(obj, kwArgs){ return cMaps["XYZ"]["Lab"](obj.toXYZ(kwArgs), kwArgs); }, "LCHab":function(obj, kwArgs){ return cMaps["LCHab"]["Lab"](cMaps["XYZ"]["Lab"](obj.toXYZ(kwArgs), kwArgs), kwArgs);}, "LCHuv":function(obj, kwArgs){ return cMaps["LCHuv"]["Luv"](cMaps["XYZ"]["Luv"](obj.toXYZ(kwArgs), kwArgs), kwArgs);}, "Luv":function(obj, kwArgs){ return cMaps["XYZ"]["Luv"](obj.toXYZ(kwArgs), kwArgs); }, "XYZ":function(obj, kwArgs){ return obj.toXYZ(kwArgs); }, "xyY":function(obj, kwArgs){ return cMaps["XYZ"]["xyY"](obj.toXYZ(kwArgs), kwArgs); } }, "XYZ":{ "CMY":function(obj, kwArgs){ return dxc.fromXYZ(obj, kwArgs).toCmy(); }, "CMYK":function(obj, kwArgs){ return dxc.fromXYZ(obj, kwArgs).toCmyk(); }, "HSL":function(obj, kwArgs){ return dxc.fromXYZ(obj, kwArgs).toHsl(); }, "HSV":function(obj, kwArgs){ return dxc.fromXYZ(obj, kwArgs).toHsv(); }, "Lab":function(obj, kwArgs){ return cMaps["XYZ"]["Lab"](obj, kwArgs); }, "LCHab":function(obj, kwArgs){ return cMaps["Lab"]["LCHab"](cMaps["XYZ"]["Lab"](obj, kwArgs), kwArgs); }, "LCHuv":function(obj, kwArgs){ return cMaps["Luv"]["LCHuv"](cMaps["XYZ"]["Luv"](obj, kwArgs), kwArgs); }, "Luv":function(obj, kwArgs){ return cMaps["XYZ"]["Luv"](obj, kwArgs); }, "RGB":function(obj, kwArgs){ return dxc.fromXYZ(obj, kwArgs); }, "xyY":function(obj, kwArgs){ return cMaps["XYZ"]["xyY"](dxc.fromXYZ(obj, kwArgs), kwArgs); } }, // TODO: revisit this. xyY represents a single color, not a spectrum of colors. "xyY":{ "CMY":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["xyY"]["XYZ"](obj, kwArgs), kwArgs).toCmy(); }, "CMYK":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["xyY"]["XYZ"](obj, kwArgs), kwArgs).toCmyk(); }, "HSL":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["xyY"]["XYZ"](obj, kwArgs), kwArgs).toHsl(); }, "HSV":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["xyY"]["XYZ"](obj, kwArgs), kwArgs).toHsv(); }, "Lab":function(obj, kwArgs){ return cMaps["Lab"]["XYZ"](cMaps["xyY"]["XYZ"](obj, kwArgs), kwArgs); }, "LCHab":function(obj, kwArgs){ return cMaps["LCHab"]["Lab"](cMaps["Lab"]["XYZ"](cMaps["xyY"]["XYZ"](obj, kwArgs), kwArgs), kwArgs); }, "LCHuv":function(obj, kwArgs){ return cMaps["LCHuv"]["Luv"](cMaps["Luv"]["XYZ"](cMaps["xyY"]["XYZ"](obj, kwArgs), kwArgs), kwArgs); }, "Luv":function(obj, kwArgs){ return cMaps["Luv"]["XYZ"](cMaps["xyY"]["XYZ"](obj, kwArgs), kwArgs); }, "RGB":function(obj, kwArgs){ return dxc.fromXYZ(cMaps["xyY"]["XYZ"](obj, kwArgs), kwArgs); }, "XYZ":function(obj, kwArgs){ return cMaps["xyY"]["XYZ"](obj, kwArgs); } } }; this.whitepoint=function(/* String */wpName, /* String? */observer){ observer=observer||"10"; var x=0, y=0, t=0; if(wpMap[observer] && wpMap[observer][wpName]){ x=wpMap[observer][wpName].x; y=wpMap[observer][wpName].y; t=wpMap[observer][wpName].t; } else { console.warn( "dojox.color.Colorspace::whitepoint: either the observer or the whitepoint name was not found. ", observer, wpName ); } var wp={ x:x, y:y, z:(1-x-y), t:t, Y:1 }; return this.convert(wp, "xyY", "XYZ"); }; this.tempToWhitepoint=function(/* Number */t){ if(t<4000){ console.warn("dojox.color.Colorspace::tempToWhitepoint: can't find a white point for temperatures less than 4000K. (Passed ", t, ")."); return { x:0, y:0 }; } if(t>25000){ console.warn("dojox.color.Colorspace::tempToWhitepoint: can't find a white point for temperatures greater than 25000K. (Passed ", t, ")."); return { x:0, y:0 }; } var t1=t, t2=t*t, t3=t2*t; var ten9=Math.pow(10, 9), ten6=Math.pow(10, 6), ten3=Math.pow(10,3); if(t<=7000){ var x=(-4.607*ten9/t3)+(2.9678*ten6/t2)+(0.09911*ten3/t)+0.2444063; } else { var x=(-2.0064*ten9/t3)+(1.9018*ten6/t2)+(0.24748*ten3/t)+0.23704; } var y=-3*x*x+2.87*x-0.275; return { x:x, y:y }; }; this.primaries=function(/* Object */kwArgs){ // mix in the defaults. kwArgs=dojo.mixin({ profile:"sRGB", whitepoint:"D65", observer:"10", adaptor:"Bradford" }, kwArgs||{}); var m=[]; if(profiles[kwArgs.profile]){ m=profiles[kwArgs.profile].slice(0); } else { console.warn( "dojox.color.Colorspace::primaries: the passed profile was not found. ", "Available profiles include: ", profiles, ". The profile passed was ", kwArgs.profile ); } var primary={ name:kwArgs.profile, gamma:m[0], whitepoint:m[1], xr:m[2], yr:m[3], Yr:m[4], xg:m[5], yg:m[6], Yg:m[7], xb:m[8], yb:m[9], Yb:m[10] }; // convert for the whitepoint if(kwArgs.whitepoint!=primary.whitepoint){ var r=this.convert( this.adapt({ color:this.convert({ x:xr, y:yr, Y:Yr }, "xyY", "XYZ"), adaptor:kwArgs.adaptor, source:primary.whitepoint, destination:kwArgs.whitepoint }), "XYZ", "xyY" ); var g=this.convert( this.adapt({ color:this.convert({ x:xg, y:yg, Y:Yg }, "xyY", "XYZ"), adaptor:kwArgs.adaptor, source:primary.whitepoint, destination:kwArgs.whitepoint }), "XYZ", "xyY" ); var b=this.convert( this.adapt({ color:this.convert({ x:xb, y:yb, Y:Yb }, "xyY", "XYZ"), adaptor:kwArgs.adaptor, source:primary.whitepoint, destination:kwArgs.whitepoint }), "XYZ", "xyY" ); primary=dojo.mixin(primary, { xr: r.x, yr: r.y, Yr: r.Y, xg: g.x, yg: g.y, Yg: g.Y, xb: b.x, yb: b.y, Yb: b.Y, whitepoint: kwArgs.whitepoint }); } return dojo.mixin(primary, { zr: 1-primary.xr-primary.yr, zg: 1-primary.xg-primary.yg, zb: 1-primary.xb-primary.yb }); // Object }; this.adapt=function(/* Object */kwArgs){ // color is required in the form of XYZ, source whitepoint name is required. if(!kwArgs.color || !kwArgs.source){ console.error("dojox.color.Colorspace::adapt: color and source arguments are required. ", kwArgs); } // defaults kwArgs=dojo.mixin({ adaptor:"Bradford", destination:"D65" }, kwArgs); // adapt var swp = this.whitepoint(kwArgs.source); var dwp = this.whitepoint(kwArgs.destination); if(adaptors[kwArgs.adaptor]){ var ma=adaptors[kwArgs.adaptor].ma; var mai=adaptors[kwArgs.adaptor].mai; }else{ console.warn("dojox.color.Colorspace::adapt: the passed adaptor '", kwArgs.adaptor, "' was not found."); } var dSrc=dxm.multiply([[swp.x, swp.y, swp.z]], ma); var dDest=dxm.multiply([[dwp.x, dwp.y, dwp.z]], ma); var center=[ [dDest[0][0]/dSrc[0][0], 0, 0], [0, dDest[0][1]/dSrc[0][1], 0], [0, 0, dDest[0][2]/dSrc[0][2]] ]; var m=dxm.multiply(dxm.multiply(ma, center), mai); var r=dxm.multiply([[ kwArgs.color.X, kwArgs.color.Y, kwArgs.color.Z ]], m)[0]; return { X:r[0], Y:r[1], Z:r[2] }; }; this.matrix=function(/* String */to, /* Object */primary){ var wp=this.whitepoint(primary.whitepoint); var Xr = p.xr/p.yr, Yr = 1, Zr = (1-p.xr-p.yr)/p.yr; var Xg = p.xg/p.yg, Yg = 1, Zg = (1-p.xg-p.yg)/p.yg; var Xb = p.xb/p.yb, Yb = 1, Zr = (1-p.xb-p.yb)/p.yb; var m1 = [[ Xr, Yr, Zr ], [ Xg, Yg, Zg ], [ Xb, Yb, Zb ]]; var m2 = [[ wp.X, wp.Y, wp.Z ]]; var sm = dojox.math.matrix.multiply(m2, dojox.math.matrix.inverse(m1)); var Sr = sm[0][0], Sg = sm[0][1], Sb = sm[0][2]; var result=[ [Sr*Xr, Sr*Yr, Sr*Zr], [Sg*Xg, Sg*Yg, Sg*Zg], [Sb*Xb, Sb*Yb, Sb*Zb] ]; if(to=="RGB"){ return dojox.math.inverse(result); } return result; }; this.epsilon=function(/* bool? */useApprox){ return (useApprox || typeof(useApprox)=="undefined")? 0.008856: 216/24289; }; this.kappa=function(/* bool? */useApprox){ return (useApprox || typeof(useApprox)=="undefined")? 903.3: 24389/27; }; this.convert=function(/* Object */color, /* string */from, /* string */to, /* Object? */kwArgs){ if(converters[from] && converters[from][to]){ return converters[from][to](obj, kwArgs); } console.warn("dojox.color.Colorspace::convert: Can't convert ", color, " from ", from, " to ", to, "."); };})();// More dojox.color and dojox.color.Color extensionsdojo.mixin(dojox.color, { fromXYZ: function(/* Object */xyz, /* Object?*/kwArgs){ kwArgs=kwArgs||{}; var p=dojox.color.Colorspace.primaries(kwArgs); var m=dojox.color.Colorspace.matrix("RGB", p); var rgb=dojox.math.matrix.mutliply([[ xyz.X, xyz.Y, xyz.Z ]], m); var r=rgb[0][0], g=rgb[0][1], b=rgb[0][2]; if(p.profile=="sRGB"){ var R = (r>0.0031308)?(1.055*Math.pow(r, 1/2.4))-0.055: 12.92*r; var G = (g>0.0031308)?(1.055*Math.pow(g, 1/2.4))-0.055: 12.92*g; var B = (b>0.0031308)?(1.055*Math.pow(b, 1/2.4))-0.055: 12.92*b; }else{ var R=Math.pow(r, 1/p.gamma), G=Math.pow(g, 1/p.gamma), B=Math.pow(b, 1/p.gamma); } return new dojox.color.Color({ r:Math.floor(R*255), g:Math.floor(G*255), b:Math.floor(B*255) }); }});dojo.extend(dojox.color.Color, { toXYZ: function(/* Object */kwArgs){ kwArgs=kwArgs||{}; var p=dojox.color.Colorspace.primaries(kwArgs); var m=dojox.color.Colorspace.matrix("XYZ", p); var _r=this.r/255, _g=this.g/255, _b=this.b/255; if(p.profile=="sRGB"){ var r=(_r>0.04045) ? Math.pow(((_r+0.055)/1.055), 2.4):_r/12.92; var g=(_g>0.04045) ? Math.pow(((_g+0.055)/1.055), 2.4):_g/12.92; var b=(_b>0.04045) ? Math.pow(((_b+0.055)/1.055), 2.4):_b/12.92; } else { var r=Math.pow(_r, p.gamma), g=Math.pow(_g, p.gamma), b=Math.pow(_b, p.gamma); } var xyz=dojox.math.matrix([[ r, g, b ]], m); return { X: xyz[0][0], Y: xyz[0][1], Z: xyz[0][2] }; // Object }});}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -