从Photoshop图层获取图层ID

问题描述

不确定我是否做对了。我正在尝试定位图层。我通常可以通过组名和图层名来做到这一点。但是,如果名称重复,确实会出现问题。因此,我将尝试查找其唯一的图层ID。

我认为这是正确的:

var srcDoc = app.activeDocument;
var numOfLayers = srcDoc.layers.length;

// main loop
for (var i = numOfLayers -1; i >= 0  ; i--)
{
   var ref = new ActionReference();
   ref.putIndex( charIDToTypeID( "Lyr " ),i);
   var layerDesc = executeActionGet(ref);
   var layerID = layerDesc.getInteger(stringIDToTypeID('layerID'));
   var currentLayer = srcDoc.layers[i].name;
   alert(layerID + " " + currentLayer);
}

...只有我期望ID是更大的随机字符串,而不是int。首先,我说对了吗?其次,有没有办法从activeLayer获取图层ID?

解决方法

ID是PS中的代理,它们仅对文档唯一:它们总是从1开始,然后新的层和层操作将+1更改ID计数器,因此通常有数百个ID过一会儿。

要获取活动层的ID,请将引用更改为target

var ref = new ActionReference();
ref.putEnumerated(cTID('Lyr '),cTID('Ordn'),cTID('Trgt')); // reference is active layer
var layerDesc = executeActionGet(ref);
var layerID = layerDesc.getInteger(stringIDToTypeID('layerID'));
alert(layerID);

P.S。这仅适用于一个活动层。对于多层,您将使用我在此处发布的功能:Get selected layers

P.P.S。请注意,您的原始代码不适用于组:DOM的索引和AM的索引不同。您需要遍历AM列表中的图层以获得正确的索引。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...