Я разрабатываю расширение 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);
Этот метод чрезвычайно медленный, особенно для больших изображений. После некоторого поиска в Google я обнаружил, что в Photoshop есть встроенный метод для создания стека изображений . Эта функция использует сам скрипт .jsx, и его можно найти на GitHub . Оглядываясь в Интернете, я обнаружил, что несколько человек пытаются загрузить содержимое папки в виде слоев , идеально. Основной код, который меня интересовал, приведен ниже.
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
. И даже после решения всех этих проблем, когда я запускаю скрипт .jsx из моего расширения, используя $.evalFile()
, у меня возникает та же ошибка, как если бы скрипт находился не в правильном каталоге: Unable to open file: anonymous
. Ошибка выдается в строке 762 импортированного 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 );