2012-12-23 86 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

相关问题