Как определить внутреннюю / внешнюю / центральную черту в PSD, используя JavaScript для фотошопа - PullRequest
0 голосов
/ 20 июня 2019

Я хочу определить размер и размер в пикселях внутри / снаружи / в центре обводки слоя PSD. У меня есть некоторый код для определения обводки слоя, но я не могу найти, какие типы обводки находится на слое

 function hasLayerFX(){  
 var ref = new ActionReference();  
 ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );   
 return  executeActionGet(ref).hasKey(stringIDToTypeID('layerEffects'));  
 }; 


var doc = app.activeDocument;
var layers = app.activeDocument.layers;
for (var x = 0; x < layers.length; x++) {
    doc.activeLayer = doc.layers[x];
    var ref = new ActionReference();
    ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"),  charIDToTypeID("Trgt"));
    var desc = executeActionGet(ref);
var results = hasLayerFX();
if(results == true){
    var stork =     executeActionGet(ref).getObjectValue(stringIDToTypeID('layerEffects')).hasKey(stringIDToTypeID('frameFX')); 
    if(stork == true){

    alert("This layer contains stork");
    }
}
}

1 Ответ

0 голосов
/ 20 июня 2019

frameFX - дескриптор объекта, как и layerEffects. Поэтому, когда вы уверены, что слой имеет штрих (используя hasKey), вы просто получаете эти значения из дескриптора слоя. Чтобы узнать, какие значения нужно искать, я использую Action Manager Humanizer Ярослава Березы

var doc = app.activeDocument,
    layers = doc.layers;

for (var x = 0; x < layers.length; x++)
{
    doc.activeLayer = doc.layers[x];
    var ref = new ActionReference();
    ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
    var desc = executeActionGet(ref);

    if (hasStroke(desc))
    {
        var strokeValues = getStrokeValues(desc);
        alert("Layer " + doc.layers[x].name + " has a " + strokeValues.type + " stroke with " + strokeValues.value + "px size");
    }
}

function hasStroke(d)
{
    if (!d.hasKey(stringIDToTypeID('layerEffects'))) return false
    if (!d.getObjectValue(stringIDToTypeID('layerEffects')).hasKey(stringIDToTypeID('frameFX'))) return false
    return true
}; // end of hasStroke()

function getStrokeValues(d) {
    var temp = d.getObjectValue(stringIDToTypeID('layerEffects')).getObjectValue(stringIDToTypeID('frameFX'));
    // possible values of the 'style' are insetFrame, centeredFrame and outsetFrame
    return {
        type: typeIDToStringID(temp.getEnumerationValue(stringIDToTypeID("style"))),
        value: temp.getInteger(stringIDToTypeID("size"))
    }
}; // end of getStrokeValues()
...