【问题标题】:How to hide layer by id?如何按ID隐藏图层?
【发布时间】:2013-11-12 21:29:39
【问题描述】:

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

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

问题:我发现在生成器插件中隐藏层的唯一方法是evaluateJSXString() 方法。这很好,但我不知道如何按 id 和按 id 访问文档。根据http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/photoshop/pdfs/photoshop-cc-javascript-ref.pdf 文档没有id 属性,图层也没有id 属性。我发现app.documents 是一个文档数组(但索引不是id),app.document[i].layers 是一个层数组,但它只包含顶层层,每个顶层层都包含子层。

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

  1. 还有其他选择吗?
  2. 使用 generator.getDocumentInfo() 时生成器如何提供文档和图层 ID?是一些生成器内部的符号吗?

【问题讨论】:

  • 您也许可以使用 activeLayer 或 app.activeDocument.artLayers.getByName("myLayerName");顺便说一句,activeLayer 在选择多个图层时不会返回任何有用的东西,而不是遍历所有图层。
  • 不幸的是,许多层可能有相同的名称...
  • 呃,原来如此!除非你强迫用户创建一个唯一的名字:)

标签: adobe photoshop extendscript photoshop-script


【解决方案1】:

我看到这是一个老问题有同样的问题。我能够使用生成器的方法evaluateJSXString 提出解决方案。您可以在生成器插件中使用 evaluateJSXString 执行扩展脚本。这里不涉及循环。只需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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多