Откройте каталог изображений в отдельные слои, используя расширение Adobe - PullRequest
2 голосов
/ 11 октября 2019

Я разрабатываю расширение 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 );

1 Ответ

0 голосов
/ 31 октября 2019

Встроенные скрипты Photoshop имеют скрипт для этого, вот ссылка на github

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

используйте этот скрипт внутри вашего расширения CEP

...