2012-07-04 130 views
3

我在試圖編寫一個Photoshop腳本,它將顯示給定名稱的所有圖層。我需要通過所有可能的嵌套層套環和我使用下面的代碼:在Javascript中循環播放Photoshop圖層

function showBounds(layerNode) 
{ 
    for(var layer in layerNode.artLayers) 
    { 
     if (layer.name == "@bounds") 
     { 
      layer.visible = 1; 
     } 
    } 

    showBounds(layerNode.layerSets); 
} 

showBounds(app.activeDocument.doc.layerSets); 

但是當我運行它,我得到以下錯誤:

Error 1302: No such element 
Line: 5 
->  for(var layer in layerNode.artLayers) 

artLayers應的屬性LayerSets,所以我很困惑。

這也是我第一次嘗試腳本PS(和使用JavaScript),所以可能有一些基本概念,我沒有得到。

+0

你不需要'for(.. in ..)'聲明中的'var' – SomeKittens

+0

在我看來,像一些'layerNode'沒有'layerNode.artLayers'。 – jfriend00

回答

6

我認爲你需要更多的東西一樣:

function showBounds(layerNode) {  
    for (var i=0; i<layerNode.length; i++) { 

     showBounds(layerNode[i].layerSets); 

     for(var layerIndex=0; layerIndex < layerNode[i].artLayers.length; layerIndex++) { 
      var layer=layerNode[i].artLayers[layerIndex]; 
      if (layer.name == "@bounds") { 
       layer.visible = 1; 
      } 
     } 
    } 
} 

showBounds(app.activeDocument.layerSets); 

此外,JavaScript的對...在語法上不工作,你覺得它的方式。它不像一個foreach循環。它遍歷對象的屬性名稱。

+0

這工作(謝謝!)...但噢,我的上帝是PS腳本緩慢。在20層的文件上運行需要30秒。在600美元的項目中沒有任何藉口。谷歌搜索只顯示PS腳本運行緩慢的抱怨。哦,我試過了。 :-) –

+0

嗯......我在一個2000x2000的文件上試了一下,它有36層,全都在一個層次上,只需要大約2秒。這是與CS6。 – aquinas

+0

我也在CS6上。一個外層集合包含20個層集,每個集都有4或5個藝術層。我正在使用iMac(8核)。當我運行該腳本時,PS屏幕閃爍,彷彿它試圖在每個命令後進行更新。 –