Photoshop Scripting 高階編程(1):取色器的應用

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;
    }
}

完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章