我正在开发一个Adobe扩展程序,我希望从该扩展程序中将图像目录加载到文档中的单独图层中。对于如何完成此操作,我完全不偏不倚-因此,如果有更好的方法,请与我分享。我当前的工作方法涉及使用open()方法,该方法在新文档中打开文件,然后将新文档的层复制到原始文档中。下面是一个示例。

// open new document
var originalDoc = app.activeDocument;
var doc = open( new File( filePath ) );

// duplicate to original document
var layer = doc.activeLayer;
var newLayer = layer.duplicate(originalDoc, ElementPlacement.PLACEATBEGINNING);

// close new document
doc.close(SaveOptions.DONOTSAVECHANGES);

这种方法特别慢,特别是对于大图像。谷歌搜索后,我发现Photoshop有一个built-in method for creating an image stack。此功能本身使用.jsx脚本,并且可以是found on GitHub。在网上环顾四周,我发现有人尝试load a folders contents as layers完美。我感兴趣的主要代码如下。
var folder = new Folder('~/Desktop/MyFolder');
function runLoadStack(folderPath) {
    var loadLayersFromScript = true;
    // @include 'Load Files into Stack.jsx'
    var fList = folder.getFiles('*.png')
    var aFlag = true;
    loadLayers.intoStack(fList, aFlag);
}
runLoadStack(folder)

我立即注意到导入堆栈方法的@include方法,我找不到为此的任何官方文档(也不便于缩小)。另外,如果脚本未与Load Files into Stack.jsx放在同一目录中,则会抛出错误Unable to open file: anonymous。甚至在解决所有这些问题后,当我使用$.evalFile()从扩展程序中运行.jsx脚本时,我仍然遇到相同的错误,就像脚本不在正确的目录中一样:Unable to open file: anonymousError is being thrown on line 762 of an imported jsx

任何解决我遇到的错误的帮助,或有关如何将图像路径数组加载到图层(更快的方法)的任何帮助,都将不胜感激!

这是我在扩展程序中使用的代码:
var loadLayersFromScript = true;
var strPresets = localize("$$$/ApplicationPresetsFolder/Presets=Presets");
var strScripts = localize("$$$/PSBI/Automate/ImageProcessor/Photoshop/Scripts=Scripts");

var jsxFilePath = app.path + "/" + strPresets + "/" + strScripts + "/Load Files into Stack.jsx";

$.evalFile( new File( jsxFilePath ) );
loadLayers.intoStack( new Folder("/c/Users/Me/teststack").getFiles(), true );

最佳答案

Photoshop的内置脚本具有执行此操作的脚本,这是github链接

https://github.com/ES-Collection/Photoshop-Scripts/blob/master/Import%20Folder%20As%20Layers.jsx

在您的CEP扩展程序内使用此脚本

关于javascript - 使用Adobe扩展程序将图像目录打开到单独的图层中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58332689/

10-11 05:50