⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 colorspace.js

📁 OA系统实现以下功能: a、个人办公,我的办公桌 b、公文管理 c、工作流程 d、组织管理 e. 权限管理
💻 JS
📖 第 1 页 / 共 2 页
字号:
/*	Copyright (c) 2004-2006, The Dojo Foundation	All Rights Reserved.	Licensed under the Academic Free License version 2.1 or above OR the	modified BSD license. For more information on Dojo licensing, see:		http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.gfx.Colorspace");dojo.require("dojo.lang.common");dojo.require("dojo.math.matrix");dojo.gfx.Colorspace = function () {	this.whitePoint = "D65";	this.stdObserver = "10";	this.chromaticAdaptationAlg = "bradford";	this.RGBWorkingSpace = "s_rgb";	this.useApproxCIELabMapping = 1;	this.chainMaps = {"RGB_to_xyY":["XYZ"], "xyY_to_RGB":["XYZ"], "RGB_to_Lab":["XYZ"], "Lab_to_RGB":["XYZ"], "RGB_to_LCHab":["XYZ", "Lab"], "LCHab_to_RGB":["Lab"], "xyY_to_Lab":["XYZ"], "Lab_to_xyY":["XYZ"], "XYZ_to_LCHab":["Lab"], "LCHab_to_XYZ":["Lab"], "xyY_to_LCHab":["XYZ", "Lab"], "LCHab_to_xyY":["Lab", "XYZ"], "RGB_to_Luv":["XYZ"], "Luv_to_RGB":["XYZ"], "xyY_to_Luv":["XYZ"], "Luv_to_xyY":["XYZ"], "Lab_to_Luv":["XYZ"], "Luv_to_Lab":["XYZ"], "LCHab_to_Luv":["Lab", "XYZ"], "Luv_to_LCHab":["XYZ", "Lab"], "RGB_to_LCHuv":["XYZ", "Luv"], "LCHuv_to_RGB":["Luv", "XYZ"], "XYZ_to_LCHuv":["Luv"], "LCHuv_to_XYZ":["Luv"], "xyY_to_LCHuv":["XYZ", "Luv"], "LCHuv_to_xyY":["Luv", "XYZ"], "Lab_to_LCHuv":["XYZ", "Luv"], "LCHuv_to_Lab":["Luv", "XYZ"], "LCHab_to_LCHuv":["Lab", "XYZ", "Luv"], "LCHuv_to_LCHab":["Luv", "XYZ", "Lab"], "XYZ_to_CMY":["RGB"], "CMY_to_XYZ":["RGB"], "xyY_to_CMY":["RGB"], "CMY_to_xyY":["RGB"], "Lab_to_CMY":["RGB"], "CMY_to_Lab":["RGB"], "LCHab_to_CMY":["RGB"], "CMY_to_LCHab":["RGB"], "Luv_to_CMY":["RGB"], "CMY_to_Luv":["RGB"], "LCHuv_to_CMY":["RGB"], "CMY_to_LCHuv":["RGB"], "XYZ_to_HSL":["RGB"], "HSL_to_XYZ":["RGB"], "xyY_to_HSL":["RGB"], "HSL_to_xyY":["RGB"], "Lab_to_HSL":["RGB"], "HSL_to_Lab":["RGB"], "LCHab_to_HSL":["RGB"], "HSL_to_LCHab":["RGB"], "Luv_to_HSL":["RGB"], "HSL_to_Luv":["RGB"], "LCHuv_to_HSL":["RGB"], "HSL_to_LCHuv":["RGB"], "CMY_to_HSL":["RGB"], "HSL_to_CMY":["RGB"], "CMYK_to_HSL":["RGB"], "HSL_to_CMYK":["RGB"], "XYZ_to_HSV":["RGB"], "HSV_to_XYZ":["RGB"], "xyY_to_HSV":["RGB"], "HSV_to_xyY":["RGB"], "Lab_to_HSV":["RGB"], "HSV_to_Lab":["RGB"], "LCHab_to_HSV":["RGB"], "HSV_to_LCHab":["RGB"], "Luv_to_HSV":["RGB"], "HSV_to_Luv":["RGB"], "LCHuv_to_HSV":["RGB"], "HSV_to_LCHuv":["RGB"], "CMY_to_HSV":["RGB"], "HSV_to_CMY":["RGB"], "CMYK_to_HSV":["RGB"], "HSV_to_CMYK":["RGB"], "HSL_to_HSV":["RGB"], "HSV_to_HSL":["RGB"], "XYZ_to_CMYK":["RGB"], "CMYK_to_XYZ":["RGB"], "xyY_to_CMYK":["RGB"], "CMYK_to_xyY":["RGB"], "Lab_to_CMYK":["RGB"], "CMYK_to_Lab":["RGB"], "LCHab_to_CMYK":["RGB"], "CMYK_to_LCHab":["RGB"], "Luv_to_CMYK":["RGB"], "CMYK_to_Luv":["RGB"], "LCHuv_to_CMYK":["RGB"], "CMYK_to_LCHuv":["RGB"]};	return this;};dojo.gfx.Colorspace.prototype.convert = function (col, model_from, model_to) {	var k = model_from + "_to_" + model_to;	if (this[k]) {		return this[k](col);	} else {		if (this.chainMaps[k]) {			var cur = model_from;			var models = this.chainMaps[k].concat();			models.push(model_to);			for (var i = 0; i < models.length; i++) {				col = this.convert(col, cur, models[i]);				cur = models[i];			}			return col;		} else {			dojo.debug("Can't convert from " + model_from + " to " + model_to);		}	}};dojo.gfx.Colorspace.prototype.munge = function (keys, args) {	if (dojo.lang.isArray(args[0])) {		args = args[0];	}	var out = new Array();	for (var i = 0; i < keys.length; i++) {		out[keys.charAt(i)] = args[i];	}	return out;};dojo.gfx.Colorspace.prototype.getWhitePoint = function () {	var x = 0;	var y = 0;	var t = 0;	switch (this.stdObserver) {	  case "2":		switch (this.whitePoint) {		  case "E":			x = 1 / 3;			y = 1 / 3;			t = 5400;			break;		  case "D50":			x = 0.34567;			y = 0.3585;			t = 5000;			break;		  case "D55":			x = 0.33242;			y = 0.34743;			t = 5500;			break;		  case "D65":			x = 0.31271;			y = 0.32902;			t = 6500;			break;		  case "D75":			x = 0.29902;			y = 0.31485;			t = 7500;			break;		  case "A":			x = 0.44757;			y = 0.40745;			t = 2856;			break;		  case "B":			x = 0.34842;			y = 0.35161;			t = 4874;			break;		  case "C":			x = 0.31006;			y = 0.31616;			t = 6774;			break;		  case "9300":			x = 0.2848;			y = 0.2932;			t = 9300;			break;		  case "F2":			x = 0.37207;			y = 0.37512;			t = 4200;			break;		  case "F7":			x = 0.31285;			y = 0.32918;			t = 6500;			break;		  case "F11":			x = 0.38054;			y = 0.37691;			t = 4000;			break;		  default:			dojo.debug("White point " + this.whitePoint + " isn't defined for Std. Observer " + this.strObserver);		}		break;	  case "10":		switch (this.whitePoint) {		  case "E":			x = 1 / 3;			y = 1 / 3;			t = 5400;			break;		  case "D50":			x = 0.34773;			y = 0.35952;			t = 5000;			break;		  case "D55":			x = 0.33411;			y = 0.34877;			t = 5500;			break;		  case "D65":			x = 0.31382;			y = 0.331;			t = 6500;			break;		  case "D75":			x = 0.29968;			y = 0.3174;			t = 7500;			break;		  case "A":			x = 0.45117;			y = 0.40594;			t = 2856;			break;		  case "B":			x = 0.3498;			y = 0.3527;			t = 4874;			break;		  case "C":			x = 0.31039;			y = 0.31905;			t = 6774;			break;		  case "F2":			x = 0.37928;			y = 0.36723;			t = 4200;			break;		  case "F7":			x = 0.31565;			y = 0.32951;			t = 6500;			break;		  case "F11":			x = 0.38543;			y = 0.3711;			t = 4000;			break;		  default:			dojo.debug("White point " + this.whitePoint + " isn't defined for Std. Observer " + this.strObserver);		}		break;	  default:		dojo.debug("Std. Observer " + this.strObserver + " isn't defined");	}	var z = 1 - x - y;	var wp = {"x":x, "y":y, "z":z, "t":t};	wp.Y = 1;	var XYZ = this.xyY_to_XYZ([wp.x, wp.y, wp.Y]);	wp.X = XYZ[0];	wp.Y = XYZ[1];	wp.Z = XYZ[2];	return wp;};dojo.gfx.Colorspace.prototype.getPrimaries = function () {	var m = [];	switch (this.RGBWorkingSpace) {	  case "adobe_rgb_1998":		m = [2.2, "D65", 0.64, 0.33, 0.297361, 0.21, 0.71, 0.627355, 0.15, 0.06, 0.075285];		break;	  case "apple_rgb":		m = [1.8, "D65", 0.625, 0.34, 0.244634, 0.28, 0.595, 0.672034, 0.155, 0.07, 0.083332];		break;	  case "best_rgb":		m = [2.2, "D50", 0.7347, 0.2653, 0.228457, 0.215, 0.775, 0.737352, 0.13, 0.035, 0.034191];		break;	  case "beta_rgb":		m = [2.2, "D50", 0.6888, 0.3112, 0.303273, 0.1986, 0.7551, 0.663786, 0.1265, 0.0352, 0.032941];		break;	  case "bruce_rgb":		m = [2.2, "D65", 0.64, 0.33, 0.240995, 0.28, 0.65, 0.683554, 0.15, 0.06, 0.075452];		break;	  case "cie_rgb":		m = [2.2, "E", 0.735, 0.265, 0.176204, 0.274, 0.717, 0.812985, 0.167, 0.009, 0.010811];		break;	  case "color_match_rgb":		m = [1.8, "D50", 0.63, 0.34, 0.274884, 0.295, 0.605, 0.658132, 0.15, 0.075, 0.066985];		break;	  case "don_rgb_4":		m = [2.2, "D50", 0.696, 0.3, 0.27835, 0.215, 0.765, 0.68797, 0.13, 0.035, 0.03368];		break;	  case "eci_rgb":		m = [1.8, "D50", 0.67, 0.33, 0.32025, 0.21, 0.71, 0.602071, 0.14, 0.08, 0.077679];		break;	  case "ekta_space_ps5":		m = [2.2, "D50", 0.695, 0.305, 0.260629, 0.26, 0.7, 0.734946, 0.11, 0.005, 0.004425];		break;	  case "ntsc_rgb":		m = [2.2, "C", 0.67, 0.33, 0.298839, 0.21, 0.71, 0.586811, 0.14, 0.08, 0.11435];		break;	  case "pal_secam_rgb":		m = [2.2, "D65", 0.64, 0.33, 0.222021, 0.29, 0.6, 0.706645, 0.15, 0.06, 0.071334];		break;	  case "pro_photo_rgb":		m = [1.8, "D50", 0.7347, 0.2653, 0.28804, 0.1596, 0.8404, 0.711874, 0.0366, 0.0001, 0.000086];		break;	  case "smpte-c_rgb":		m = [2.2, "D65", 0.63, 0.34, 0.212395, 0.31, 0.595, 0.701049, 0.155, 0.07, 0.086556];		break;	  case "s_rgb":		m = [2.2, "D65", 0.64, 0.33, 0.212656, 0.3, 0.6, 0.715158, 0.15, 0.06, 0.072186];		break;	  case "wide_gamut_rgb":		m = [2.2, "D50", 0.735, 0.265, 0.258187, 0.115, 0.826, 0.724938, 0.157, 0.018, 0.016875];		break;	  default:		dojo.debug("RGB working space " + this.RGBWorkingSpace + " isn't defined");	}	var p = {name:this.RGBWorkingSpace, gamma:m[0], wp: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]};	if (p.wp != this.whitePoint) {		var r = this.XYZ_to_xyY(this.chromaticAdaptation(this.xyY_to_XYZ([p.xr, p.yr, p.Yr]), p.wp, this.whitePoint));		var g = this.XYZ_to_xyY(this.chromaticAdaptation(this.xyY_to_XYZ([p.xg, p.yg, p.Yg]), p.wp, this.whitePoint));		var b = this.XYZ_to_xyY(this.chromaticAdaptation(this.xyY_to_XYZ([p.xb, p.yb, p.Yb]), p.wp, this.whitePoint));		p.xr = r[0];		p.yr = r[1];		p.Yr = r[2];		p.xg = g[0];		p.yg = g[1];		p.Yg = g[2];		p.xb = b[0];		p.yb = b[1];		p.Yb = b[2];		p.wp = this.whitePoint;	}	p.zr = 1 - p.xr - p.yr;	p.zg = 1 - p.xg - p.yg;	p.zb = 1 - p.xb - p.yb;	return p;};dojo.gfx.Colorspace.prototype.epsilon = function () {	return this.useApproxCIELabMapping ? 0.008856 : 216 / 24289;};dojo.gfx.Colorspace.prototype.kappa = function () {	return this.useApproxCIELabMapping ? 903.3 : 24389 / 27;};dojo.gfx.Colorspace.prototype.XYZ_to_xyY = function () {	var src = this.munge("XYZ", arguments);	var sum = src.X + src.Y + src.Z;	if (sum == 0) {		var wp = this.getWhitePoint();		var x = wp.x;		var y = wp.y;	} else {		var x = src.X / sum;		var y = src.Y / sum;	}	var Y = src.Y;	return [x, y, Y];};dojo.gfx.Colorspace.prototype.xyY_to_XYZ = function () {	var src = this.munge("xyY", arguments);	if (src.y == 0) {		var X = 0;		var Y = 0;		var Z = 0;	} else {		var X = (src.x * src.Y) / src.y;		var Y = src.Y;		var Z = ((1 - src.x - src.y) * src.Y) / src.y;	}	return [X, Y, Z];};dojo.gfx.Colorspace.prototype.RGB_to_XYZ = function () {	var src = this.munge("RGB", arguments);	var m = this.getRGB_XYZ_Matrix();	var pr = this.getPrimaries();	if (this.RGBWorkingSpace == "s_rgb") {		var r = (src.R > 0.04045) ? Math.pow(((src.R + 0.055) / 1.055), 2.4) : src.R / 12.92;		var g = (src.G > 0.04045) ? Math.pow(((src.G + 0.055) / 1.055), 2.4) : src.G / 12.92;		var b = (src.B > 0.04045) ? Math.pow(((src.B + 0.055) / 1.055), 2.4) : src.B / 12.92;	} else {		var r = Math.pow(src.R, pr.gamma);		var g = Math.pow(src.G, pr.gamma);		var b = Math.pow(src.B, pr.gamma);	}	var XYZ = dojo.math.matrix.multiply([[r, g, b]], m);	return [XYZ[0][0], XYZ[0][1], XYZ[0][2]];};dojo.gfx.Colorspace.prototype.XYZ_to_RGB = function () {	var src = this.munge("XYZ", arguments);	var mi = this.getXYZ_RGB_Matrix();	var pr = this.getPrimaries();	var rgb = dojo.math.matrix.multiply([[src.X, src.Y, src.Z]], mi);	var r = rgb[0][0];	var g = rgb[0][1];	var b = rgb[0][2];	if (this.RGBWorkingSpace == "s_rgb") {		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 / pr.gamma);		var G = Math.pow(g, 1 / pr.gamma);		var B = Math.pow(b, 1 / pr.gamma);	}	return [R, G, B];};dojo.gfx.Colorspace.prototype.XYZ_to_Lab = function () {	var src = this.munge("XYZ", arguments);	var wp = this.getWhitePoint();	var xr = src.X / wp.X;	var yr = src.Y / wp.Y;	var zr = src.Z / wp.Z;	var fx = (xr > this.epsilon()) ? Math.pow(xr, 1 / 3) : (this.kappa() * xr + 16) / 116;	var fy = (yr > this.epsilon()) ? Math.pow(yr, 1 / 3) : (this.kappa() * yr + 16) / 116;	var fz = (zr > this.epsilon()) ? Math.pow(zr, 1 / 3) : (this.kappa() * zr + 16) / 116;	var L = 116 * fy - 16;	var a = 500 * (fx - fy);	var b = 200 * (fy - fz);	return [L, a, b];};dojo.gfx.Colorspace.prototype.Lab_to_XYZ = function () {	var src = this.munge("Lab", arguments);	var wp = this.getWhitePoint();	var yr = (src.L > (this.kappa() * this.epsilon())) ? Math.pow((src.L + 16) / 116, 3) : src.L / this.kappa();	var fy = (yr > this.epsilon()) ? (src.L + 16) / 116 : (this.kappa() * yr + 16) / 116;	var fx = (src.a / 500) + fy;	var fz = fy - (src.b / 200);	var fxcube = Math.pow(fx, 3);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -