Adobe 如何按id隐藏图层?

Adobe 如何按id隐藏图层?,adobe,photoshop,extendscript,photoshop-script,Adobe,Photoshop,Extendscript,Photoshop Script,我正在编写generator插件,并使用方法generator.getDocumentInfo()获取文档结构。它返回树结构中包含层对象的文档对象document对象具有属性document.id,并且每个层都具有属性layer.id 目标:我想隐藏图层-我只知道文档id和图层id 问题:我找到的生成器插件中隐藏层的唯一方法是evaluateJSXString()method。这很好,但我不知道如何按id和逐层id访问文档。相应的文档没有id属性,层也没有id属性。我只发现app.documen

我正在编写
generator
插件,并使用方法
generator.getDocumentInfo()
获取文档结构。它返回树结构中包含
对象的
文档
对象
document
对象具有属性
document.id
,并且每个层都具有属性
layer.id

目标:我想隐藏图层-我只知道文档id和图层id

问题:我找到的生成器插件中隐藏层的唯一方法是
evaluateJSXString()
method。这很好,但我不知道如何按id和逐层id访问文档。相应的文档没有
id
属性,层也没有
id
属性。我只发现
app.documents
是一个文档数组(但索引不是id),而
app.document[I].layers
是一个层数组,但它只包含顶级层,每个顶级层都包含子层

我看到的唯一选项是编写JSX脚本,该脚本将首先遍历
app.documents
数组以查找文件名匹配的文档,然后在
document.layers
树结构中搜索一个层

  • 还有其他选择吗
  • 使用generator.getDocumentInfo()时,generator如何提供文档和图层ID?是内部符号吗

  • 我看这是一个老问题,我也有同样的问题。我能够使用generator的方法
    evaluateJSXString
    想出一个解决方案。您可以在生成器插件中使用
    evaluateJSXString
    执行extendscript。这里不涉及循环。只需按
    layerID

    注意:
    layerID
    是一个保存图层ID的变量,它连接到要计算的字符串

    要显示图层,请执行以下操作:

      var changeVisibilityString = " var ref = new ActionReference(); \
                                      ref.putIdentifier(charIDToTypeID('Lyr '), " + layerID + " ); \
                                      var desc = new ActionDescriptor(); \
                                      desc.putReference(charIDToTypeID('null'), ref); \
                                      desc.putBoolean(charIDToTypeID('MkVs'), false); \
                                      executeAction( charIDToTypeID('Shw '), desc);"
    
        generator.evaluateJSXString(changeVisibilityString);
    
      var changeVisibilityString = " var ref = new ActionReference(); \
                                      ref.putIdentifier(charIDToTypeID('Lyr '), " + layerID + " ); \
                                      var desc = new ActionDescriptor(); \
                                      desc.putReference(charIDToTypeID('null'), ref); \
                                      desc.putBoolean(charIDToTypeID('MkVs'), false); \
                                      executeAction( charIDToTypeID('Hd  '), desc);"
    
        generator.evaluateJSXString(changeVisibilityString);
    
    要隐藏图层,请执行以下操作:

      var changeVisibilityString = " var ref = new ActionReference(); \
                                      ref.putIdentifier(charIDToTypeID('Lyr '), " + layerID + " ); \
                                      var desc = new ActionDescriptor(); \
                                      desc.putReference(charIDToTypeID('null'), ref); \
                                      desc.putBoolean(charIDToTypeID('MkVs'), false); \
                                      executeAction( charIDToTypeID('Shw '), desc);"
    
        generator.evaluateJSXString(changeVisibilityString);
    
      var changeVisibilityString = " var ref = new ActionReference(); \
                                      ref.putIdentifier(charIDToTypeID('Lyr '), " + layerID + " ); \
                                      var desc = new ActionDescriptor(); \
                                      desc.putReference(charIDToTypeID('null'), ref); \
                                      desc.putBoolean(charIDToTypeID('MkVs'), false); \
                                      executeAction( charIDToTypeID('Hd  '), desc);"
    
        generator.evaluateJSXString(changeVisibilityString);
    

    我看这是一个老问题,我也有同样的问题。我能够使用generator的方法
    evaluateJSXString
    想出一个解决方案。您可以在生成器插件中使用
    evaluateJSXString
    执行extendscript。这里不涉及循环。只需按
    layerID

    注意:
    layerID
    是一个保存图层ID的变量,它连接到要计算的字符串

    要显示图层,请执行以下操作:

      var changeVisibilityString = " var ref = new ActionReference(); \
                                      ref.putIdentifier(charIDToTypeID('Lyr '), " + layerID + " ); \
                                      var desc = new ActionDescriptor(); \
                                      desc.putReference(charIDToTypeID('null'), ref); \
                                      desc.putBoolean(charIDToTypeID('MkVs'), false); \
                                      executeAction( charIDToTypeID('Shw '), desc);"
    
        generator.evaluateJSXString(changeVisibilityString);
    
      var changeVisibilityString = " var ref = new ActionReference(); \
                                      ref.putIdentifier(charIDToTypeID('Lyr '), " + layerID + " ); \
                                      var desc = new ActionDescriptor(); \
                                      desc.putReference(charIDToTypeID('null'), ref); \
                                      desc.putBoolean(charIDToTypeID('MkVs'), false); \
                                      executeAction( charIDToTypeID('Hd  '), desc);"
    
        generator.evaluateJSXString(changeVisibilityString);
    
    要隐藏图层,请执行以下操作:

      var changeVisibilityString = " var ref = new ActionReference(); \
                                      ref.putIdentifier(charIDToTypeID('Lyr '), " + layerID + " ); \
                                      var desc = new ActionDescriptor(); \
                                      desc.putReference(charIDToTypeID('null'), ref); \
                                      desc.putBoolean(charIDToTypeID('MkVs'), false); \
                                      executeAction( charIDToTypeID('Shw '), desc);"
    
        generator.evaluateJSXString(changeVisibilityString);
    
      var changeVisibilityString = " var ref = new ActionReference(); \
                                      ref.putIdentifier(charIDToTypeID('Lyr '), " + layerID + " ); \
                                      var desc = new ActionDescriptor(); \
                                      desc.putReference(charIDToTypeID('null'), ref); \
                                      desc.putBoolean(charIDToTypeID('MkVs'), false); \
                                      executeAction( charIDToTypeID('Hd  '), desc);"
    
        generator.evaluateJSXString(changeVisibilityString);
    

    您可能可以使用activeLayer或app.activeDocument.artLayers.getByName(“myLayerName”);顺便说一句,当选择多个层时,activeLayer不会遍历所有层,而不会返回任何有用的信息。不幸的是,许多层可能具有相同的名称…呃,按id,就是这样!除非您强制用户创建唯一的名称:),否则您可能可以使用activeLayer或app.activeDocument.artLayers.getByName(“myLayerName”);顺便说一句,当选择多个层时,activeLayer不会遍历所有层,而不会返回任何有用的信息。不幸的是,许多层可能具有相同的名称…呃,按id,就是这样!除非强制用户创建唯一的名称:)