【问题标题】:Photoshop Javascript List LayersPhotoshop Javascript 列出图层
【发布时间】:2018-08-27 15:57:05
【问题描述】:

我想在 json 文档中列出图层。在我的代码之后:

#include json2.js
var doc = app.activeDocument;
var allLayers = [];
var allLayers = collectAllLayers(doc, allLayers);

function collectAllLayers (doc, allLayers){
    for (var m = 0; m < doc.layers.length; m++){
        var theLayer = doc.layers[m];
        if (theLayer.typename === "ArtLayer"){
            allLayers.push(theLayer);
        }else{
            collectAllLayers(theLayer, allLayers);
        }
    }
    return allLayers;
}
var json = JSON.stringify(allLayers);

alert(json);

我收到一个错误General Photoshop error occurred.This functionality may not be avaliable in this version of photoshop 我想列出组和层 ex。像这样:

Group1

> Layer 1

> Layer 2

> Group 2

> > Layer 3

> > Layer 4

> > Group 3

> > > Layer 5

> > > Layer 6

> Layer 3

你有什么想法吗? 提前感谢您的回答和帮助!

【问题讨论】:

    标签: javascript json photoshop


    【解决方案1】:

    我建议您阅读有关 Action Manager 代码的信息,在 Photoshop 中使用 DOM 主要是缓慢且有限的。例如,这个非递归函数将遍历所有层并将层 DOM 对象添加到您的allLayers

    var doc = app.activeDocument;
    var allLayers = [];
    
    traverseLayersAMFlat(doc);
    
    alert(allLayers);
    
    //non-recursive action manager traversal function
    function traverseLayersAMFlat(doc)
    {
       function _selectLayerById(ID)   //select just this layer
       {
          var ref = new ActionReference();
          ref.putIdentifier(charIDToTypeID('Lyr '), ID);
          var desc = new ActionDescriptor();
          desc.putReference(charIDToTypeID('null'), ref);
          desc.putBoolean(charIDToTypeID('MkVs'), false);
          executeAction(charIDToTypeID('slct'), desc, DialogModes.NO);
       }//_selectLayerById
    
       //how many layers are there in this document?
       var ref = new ActionReference();
       ref.putEnumerated(charIDToTypeID('Dcmn'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt'));
       var count = executeActionGet(ref).getInteger(charIDToTypeID('NmbL'));
    
       //traverse the list backwards (does parents first)
       for (var i = count; i >= 1; i--)
       {
          ref = new ActionReference();
          ref.putIndex(charIDToTypeID('Lyr '), i);
          var desc = executeActionGet(ref);   //access layer index #i
          var layerID = desc.getInteger(stringIDToTypeID('layerID'));   //ID for selecting by ID #
          var layerSection = typeIDToStringID(desc.getEnumerationValue(stringIDToTypeID('layerSection'))); //layerSectionStart, layerSectionContent, laterSectionEnd
          if (layerSection != 'layerSectionEnd')
          {
             _selectLayerById(layerID);
             allLayers.push(app.activeDocument.activeLayer)
          }      
       }//for i-- countdown
    
       try   
       {   //if there is a magic background layer, process it, too
          app.activeDocument.activeLayer = app.activeDocument.backgroundLayer;
          allLayers.push(app.activeDocument.backgroundLayer)
       } catch (e) {;}
    
    }
    

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 2019-01-13
      • 2015-07-03
      • 2014-12-24
      • 2019-11-25
      相关资源
      最近更新 更多