2012-12-23 122 views
0

我有一個從一個文檔到另一個複製圖層的問題。我有這樣的代碼(.jsx腳本我的Photoshop文檔內)JSX複製圖層adobe photoshop

var docRef = app.activeDocument; 
app.activeDocument.selection.selectAll(); 

var calcWidth = app.activeDocument.selection.bounds[2] -app.activeDocument.selection.bounds[0]; 

var calcHeight = app.activeDocument.selection.bounds[3] - app.activeDocument.selection.bounds[1]; 
var docResolution = app.activeDocument.resolution; 

var document = app.documents.add(calcWidth, calcHeight, docResolution); 
app.activeDocument = docRef; 

try { 
    dupObj.artLayers[i].duplicate(document, ElementPlacement.INSIDE); 
} 
catch(e) { 
    alert(e) 
} 

但我仍然收到錯誤

Error: You can only duplicate layers from the frontmost document.

你有任何想法如何使它工作?

回答

0

您沒有調用活動文檔:您需要調用對活動文檔的引用以及您使用的文檔的引用 - 因此是錯誤。

var docRef = app.activeDocument; 
docRef.selection.selectAll(); 

var calcWidth = docRef.selection.bounds[2] -app.activeDocument.selection.bounds[0]; 

var calcHeight = docRef.selection.bounds[3] - app.activeDocument.selection.bounds[1]; 
var docResolution = docRef.resolution; 

var document = app.documents.add(calcWidth, calcHeight, docResolution); 
app.activeDocument = docRef; 

try { 
    dupObj.artLayers[i].duplicate(document, ElementPlacement.INSIDE); 
} 
catch(e) { 
    alert(e) 
} 

我沒有使用過dupObj因爲我用CS和腳本監聽器代碼複製文件 我也沒有檢查的代碼,但給它一個去。

2

您收到錯誤的原因是dupObj從未定義過。我想你的意思是使用docRef,第1行中的參考源文檔這似乎現在工作得很好:

var docRef = app.activeDocument; 
app.activeDocument.selection.selectAll(); 

var calcWidth = app.activeDocument.selection.bounds[2] -app.activeDocument.selection.bounds[0]; 

var calcHeight = app.activeDocument.selection.bounds[3] - app.activeDocument.selection.bounds[1]; 
var docResolution = app.activeDocument.resolution; 

var document = app.documents.add(calcWidth, calcHeight, docResolution); 
app.activeDocument = docRef; 

try { 
    docRef.artLayers[i].duplicate(document, ElementPlacement.INSIDE); // ** changed to docRef ** 
} 
catch(e) { 
    alert(e) 
} 

話雖這麼說,有可能是有幾個隱藏的錯誤,你應該看看。在這條線:

docRef.artLayers[i].duplicate(document, ElementPlacement.INSIDE); 

i從未定義,顯然默認爲0而不發出一個錯誤。結果是您將只複製artLayers陣列中的第一層。

此外,由於您使用app.activeDocument.selection.selectAll();選擇整個文檔,因此不需要計算選擇的大小。它將始終與原始文檔的大小相同。您可以使用docRef.widthdocRef.height作爲新文檔的寬度和高度。此外,當你複製一個圖層時,它會複製整個圖層,無論選擇什麼,據我所知。

如果你只想做一個新的文檔大小相同的層使用的是artLayers[i].bounds重複嘗試,而不是selection.bounds

相關問題