如何使用 javascript for photoshop 识别 PSD 中的内部/外部/中心笔划
how can identify inside / outside / center stroke in PSD using javascript for photoshop
我想识别 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");
}
}
}
frameFX
是一个对象描述符,就像layerEffects
一样。因此,当您确定图层有笔划(使用 hasKey
)时,您只需从图层描述符中获取这些值。要知道要寻找什么值,我使用 Jaroslav Bereza 的 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()
我想识别 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");
}
}
}
frameFX
是一个对象描述符,就像layerEffects
一样。因此,当您确定图层有笔划(使用 hasKey
)时,您只需从图层描述符中获取这些值。要知道要寻找什么值,我使用 Jaroslav Bereza 的 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()