我试图使用以下Photoshop CC JavaScript脚本将PSD文件中的所有图层都保存下来,并将它们另存为单独的文件:

var file = new File('path/to/file.psd'),
  docRef = open(file),
  i,
  len,
  duplicateLayer,
  dimens,
  newDoc,
  newLayer;

for (var i = 0, len = docRef.artLayers.length; i < len; i += 1) {
  duplicateLayer = docRef.artLayers[i].duplicate();
  //duplicateLayer.(RasterizeType.ENTIRELAYER);
  duplicateLayer.copy();
  dimens = duplicateLayer.bounds;

  newDoc = documents.add(dimens[2] - dimens[0], dimens[3] - dimens[1], 300,
                         'exportedLayer' + i, NewDocumentMode.RGB,
                         DocumentFill.TRANSPARENT);
  newLayer = newDoc.artLayers.add();
  newDoc.paste();
}


不幸的是,它不起作用。我遇到各种各样的错误,主要是关于如何只能从最前面的文档复制图层的错误。这是什么意思?

抱歉,但是对于Photoshop来说,我是一个完全的初学者,因此,我对如何使上述脚本实现所需的任何帮助将不胜感激。

非常感谢大家。

最佳答案

var file = new File('path/to/file.psd'),
  docRef = open(file),
  i,
  len,
  duplicateLayer,
  dimens,
  newDoc,
  newLayer,
  layers = [];

for (var i = 0, len = docRef.artLayers.length; i < len; i += 1) {
  layers[i] = docRef.artLayers[i];
}
for (var i = 0, len = layers.length; i < len; i += 1) {
  app.activeDocument = docRef;
  duplicateLayer = layers[i].duplicate();
  duplicateLayer.rasterize(RasterizeType.ENTIRELAYER);
  dimens = duplicateLayer.bounds;
  duplicateLayer.cut();

  newDoc = documents.add(dimens[2] - dimens[0], dimens[3] - dimens[1], 300,
                         'exportedLayer' + i, NewDocumentMode.RGB,
                         DocumentFill.TRANSPARENT);
  newLayer = newDoc.artLayers.add();
  app.activeDocument = newDoc;
  newDoc.paste();
}


首先,请注意,我将重点放在创建的每个图层的原始文档上。
其次,我保留了对所有图层的引用,因为在新图层上玩耍可能会打乱您遍历原始图层的过程。
第三,我使用剪切而不是复制来删除新添加的图层。
还有...瞧

关于javascript - 如何编写Photoshop JavaScript脚本,将PSD文件中的所有图层复制到新文档中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20792057/

10-13 00:42