0

我在将图层从一个文档复制到另一个文档时遇到问题。我有这个代码(我的 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)
}

但我仍然收到错误

错误:您只能从最前面的文档中复制图层。

你有什么想法如何让它发挥作用吗?

4

3 回答 3

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.widthanddocRef.height作为新文档的宽度和高度。此外,据我所知,当您复制一个图层时,无论选择如何,它都会复制整个图层。

如果您只想制作与要复制的图层大小相同的新文档,请尝试使用artLayers[i].bounds而不是selection.bounds

于 2012-12-29T03:54:26.183 回答
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 和脚本侦听器代码来复制文档而且我没有检查过代码,但试一试。

于 2012-12-25T17:48:19.083 回答
0

问题是您正在尝试使用document在 JS 中保留的名为的变量。

正如 Sergey 指出的那样,document(令人惊讶的是)不是 JSX 中的保留字,因为 Adob​​e 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)
于 2021-02-27T08:41:08.827 回答