Photoshop Scripting 高阶编程(1):取色器的应用
有如下示例图片一张,需要把其中各个圆点的颜色取出,并成对匹配上。
要解决这么几个问题:
1)如何取色。
2)取色后的存储与匹配方法。
var doc = app.activeDocument;
var centerX = 375;
var centerY = 627;
var tmpColors = new Array(0);
var tmpDots = new Array(0);
for (var i = -2; i <= 2; i++)
{
for (var j = -2; j <= 2; j++)
{
var tmpX = centerX + 148 * i;
var tmpY = centerY + 148 * j;
var color = getColor(tmpX, tmpY);
// alert ("color: " + color.rgb.red + ", " + color.rgb.green + ", " + color.rgb.blue);
if (isNotEmpty (color)) {
// alert ("is not empty");
var isExistingColor = false;
for (var k = 0; k < tmpColors.length; ++k) {
var colorRecorded = tmpColors[k];
if (isSameColor (colorRecorded, color)) {
// alert ("add this existing color as B");
tmpDots[k * 2 + 1] = [i + 2, -j + 2];
isExistingColor = true;
break;
}
}
if (!isExistingColor) {
// alert ("add this new color as A");
tmpColors.push (color);
tmpDots.push ([i + 2, -j + 2]);
tmpDots.push ([-1, -1]);
}
}
}
}
// alert ("colors length: " + tmpColors.length);
// alert ("dots length: " + tmpDots.length);
var levelNum = doc.name.split(".")[0];
var result = levelNum + "; " + tmpColors.length + "; ";
for (var a = 0; a < tmpDots.length; a += 2) {
result += ("(" + tmpDots[a][0] + "," + tmpDots[a][1] + "):" + "(" + tmpDots[a + 1][0] + "," + tmpDots[a + 1][1] + "); ");
}
alert (result);
function getColor(x, y)
{
doc.colorSamplers.removeAll();
var myColorSampler = doc.colorSamplers.add([0, 0]);
myColorSampler.move([x, y]);
return myColorSampler.color;
}
function isNotEmpty(color)
{
if (color.rgb.red <= 32 && color.rgb.green <= 32 && color.rgb.blue <= 32) {
return false
} else {
return true;
}
}
function isSameColor(color1, color2)
{
var deltaR = color1.rgb.red - color2.rgb.red;
var deltaG = color1.rgb.green - color2.rgb.green;
var deltaB = color1.rgb.blue - color2.rgb.blue;
if (deltaR < 8 && deltaR > -8 &&
deltaG < 8 && deltaG > -8 &&
deltaB < 8 && deltaB > -8) {
return true;
} else {
return false;
}
}
完成。