カラーミキサーのようなもの【ミカン】

PhotoShopのカラーミキサーみたいなものがほしくて
作ってみたけど、まだ作りかけ〜

例)
C => C100,M100
M => M50,Y100
Y => M100
K => Y100
こんな感じでレッツ!ミキシング。

只、JavaScriptからは、アピアランスの中やグラデーションメッシュのポイントが触れない。
限定的な使い方しかできませんが、ライブカラーではできないことができるかも?

//COLOR MIXER
//like PhotoShop Color Mixer

#include 'c.jsx';

//Mixing Value
var convertCMYK = {
cyan : { c : 100 , m : 100 , y : 0 , k : 0 },
magenta : { c : 0 , m : 50 , y : 100 , k : 0 },
yellow  : { c : 0 , m : 100 , y : 0 , k : 0 },
black : { c : 0 , m : 0 , y : 100 , k : 0 },
};
/*
var convertCMYK = {
cyan : "C100,M60",
magenta : "M100,Y100",
yellow  : "C100,Y100",
black : "K50"
};

//
var Str2CMYK = function (Str){
var A0 = Str.match(/(C|c)([0-9]+)/) ? Str.match(/(C|c)([0-9]+)/)[2] : 0;
var A1 = Str.match(/(M|m)([0-9]+)/) ? Str.match(/(M|m)([0-9]+)/)[2] : 0;
var A2 = Str.match(/(Y|y)([0-9]+)/) ? Str.match(/(Y|y)([s0-9]+)/)[2] : 0;
var A4 = Str.match(/(K|k)([0-9]+)/) ? Str.match(/(K|k)([0-9]+)/)[2] : 0;
return {c:A0,m:A1,y:A2,k:A4};
}
//
for(i in convertCMYK){convertCMYK[i] = Str2CMYK(convertCMYK[i]);}
*/
//colorMixer
function colorMixer(Obj,cCMYK){
	var converter = function(obj,xyz){
		var cCMYK = {'cyan' : xyz['cyan'],'magenta' : xyz['magenta'],'yellow':xyz['yellow'],'black':xyz['black']};
		var c = 0;var m = 0; var y = 0; var k = 0;
		switch(obj.typename){
				//case of GrayColor
				case "GrayColor":
				break;
				//case of CMYKColor
				case "CMYKColor" :
				for(i in cCMYK){
				cCMYK[i] = {
						'c':cCMYK[i]['c']*obj[i]/100,
						'm':cCMYK[i]['m']*obj[i]/100,
						'y':cCMYK[i]['y']*obj[i]/100,
						'k':cCMYK[i]['k']*obj[i]/100
						}
				}
				for(i in cCMYK){
					c = c + cCMYK[i]['c'];
					m = m + cCMYK[i]['m'];
					y = y + cCMYK[i]['y'];
					k = k+ cCMYK[i]['k'];
				}
				obj['cyan'] = c < 100 ? c : 100;
				obj['magenta'] = m < 100 ? m : 100;
				obj['yellow'] = y < 100 ? y : 100;
				obj['black'] = k < 100 ? k : 100;
				break;
		}
		return obj
	};
	var TARGET = ['fillColor','strokeColor'];
	while(x = TARGET.shift()){
	switch(Obj[x].typename){
		case "GrayColor":
			Obj[x] = converter(Obj[x] ,cCMYK);
		break;
		case "CMYKColor":
			Obj[x] = converter(Obj[x] ,cCMYK);
		break;
		case "GradientColor":
			c(Obj[x].gradient.gradientStops).e(function(){this.color = converter(this.color, cCMYK);});
		break;
	}
	};

};

//TEST
c("P").each(colorMixer,convertCMYK);

テスコム ハンドミキサー THM1000

テスコム ハンドミキサー THM1000