我遇到了将图层从一个文档复制到另一个文档的问题。我有这个代码(我的photoshop文档中的.jsx脚本)
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)
}
但我仍然收到错误
错误:您只能复制最前面文档中的图层。
您对如何使其有效有任何想法吗?
答案 0 :(得分: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.width
和docRef.height
作为新文档的宽度和高度。此外,当你复制一个图层时,无论选择什么,它都会复制整个图层。
如果您只想制作与要复制的图层尺寸相同的新文档,请尝试使用artLayers[i].bounds
代替selection.bounds
答案 1 :(得分: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 :(得分:0)
问题在于您试图使用一个名为 document
的变量,该变量在 JS 中保留。
正如 Sergey 指出的那样,document
(令人惊讶地)不是 JSX 中的保留字因为 Adobe JSX 不是“常规”的 JSX
虽然它没有解决确切的语法错误,但我还是留在这里,因为它是解决在文档之间复制图层的整体问题的快速方法。
// Grab docs
const doc1 = app.activeDocument
const doc2 = app.documents.add(100, 100)
const outputLayer = doc1.layers[0]
const inputLayer = doc2.layers[0]
inputLayer.duplicate(outputLayer, ElementPlacement.INSIDE)