【问题标题】:Open a directory of images into separate layers using Adobe extension使用 Adob​​e 扩展将图像目录打开到单独的图层中
【发布时间】:2020-02-08 11:25:22
【问题描述】:

我正在开发一个 Adob​​e 扩展程序,我想从扩展程序中将图像目录加载到文档中的单独层中。我对如何做到这一点完全不偏不倚——所以如果有更好的方法,请与我分享。我当前的working 方法涉及使用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 );

【问题讨论】:

  • 澄清一下:您正在尝试从 CEP 扩展运行脚本,它不再有任何 @include 并且您正在使用 @987654336 包含 .jsx 文件@ 提供 jsx 文件的完整路径?
  • 是的,这两个问题都是正确的。我什至尝试将Load Files into Stack.jsx 中的eval'd 文件包含到一个大文件中,结果相同。

标签: javascript adobe extendscript


【解决方案1】:

Photoshop 的内置脚本有一个脚本可以执行此操作,这是 github 链接

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

在您的 CEP 扩展中使用此脚本

【讨论】:

  • 这使用了 open() 方法,该方法非常慢,而不是我正在寻找的解决方案,正如我在问题中非常清楚地提到的那样。
  • 我想为了做到这一点,你将不得不使用 c++ sdk
猜你喜欢
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多