Скрипт Photoshop Обработка изображений из строя - PullRequest
0 голосов
/ 27 января 2019

Я запускаю javascript с помощью инструмента / опции скриптов в Photoshop для пакетной обработки папки изображений.Сценарий добавляет второй слой изображения из одного изображения в папке 02 к числу изображений в папке 01. Это работает нормально, однако я пытаюсь уменьшить непрозрачность добавляемого слоя, чтобы добавляемое изображениеиз папки 02 становится все более прозрачным для каждого последующего изображения, обработанного из папки 01. Я в основном создаю эффект постепенного изменения, который переходит от изображения в папке 02 к отображению изображений, обработанных из папки 01. Изменение непрозрачности происходит, как и ожидалось (уменьшение непрозрачностиза каждое обработанное изображение);однако, кажется, что они обрабатываются не по порядку, поэтому, когда я просматриваю изображения по порядку, непрозрачность этого добавленного слоя меняется.Я также вижу, что по мере того, как вновь обработанные изображения сохраняются в папке обработанных изображений, они поступают не по порядку (что-то вроде 1, 3, 2, 5, 6, 4; хотя они могут каждый раз отличаться).Я подозреваю, что мне нужно заставить мой код обрабатывать изображения по очереди, но я не знаю, как это сделать.Заранее спасибо!Я не верю, что именование файлов является проблемой, поскольку я попытался назвать изображения в папке 01 как 1, 2, 3, (и т. Д.), А также 01, 02, 03. Но это не помогает.

Заранее спасибо!

#target photoshop
// FOLDERS
var folder1 = new Folder('~/Desktop/1/');
var folder2 = new Folder('~/Desktop/2/');
var saveFolder = new Folder('~/Desktop/done/');
//
var searchMask = '*.???'; // get files named as this
var list1 = folder1.getFiles(searchMask);
var list2 = folder2.getFiles(searchMask);
var psdOptions = new PhotoshopSaveOptions();
psdOptions.layers = true;
opacityLevel = 100;


for (var i = 0; i < list1.length; i++) {
var doc = open(list1[i]);
var docName = doc.name;

placeFile('~/Desktop/2/1.jpg', 100); // for adding only one file each source file
doc.activeLayer.blendMode = BlendMode.LIGHTEN; // @@ change BLEND MODE

placeFile('~/Desktop/2/2.png', 100); // for adding only one file each source file
doc.activeLayer.blendMode = BlendMode.MULTIPLY; // @@ change BLEND MODE

doc.activeLayer.opacity = opacityLevel; // set layer opacity

// Decrement opacity level for each image
if (doc.activeLayer.opacity > 5) {  
    opacityLevel = Math.round(doc.activeLayer.opacity) - 5;
    } 

// SAVING
doc.saveAs(new File(saveFolder + '/' + docName.split('.')[0] + '.psd'), psdOptions);
doc.close(SaveOptions.DONOTSAVECHANGES);
};

function placeFile(file, scale) {
    try {
    var idPlc = charIDToTypeID("Plc ");
    var desc2 = new ActionDescriptor();
    var idnull = charIDToTypeID("null");
    desc2.putPath(idnull, new File(file));
    var idFTcs = charIDToTypeID("FTcs");
    var idQCSt = charIDToTypeID("QCSt");
    var idQcsa = charIDToTypeID("Qcsa");
    desc2.putEnumerated(idFTcs, idQCSt, idQcsa);
    var idOfst = charIDToTypeID("Ofst");
    var desc3 = new ActionDescriptor();
    var idHrzn = charIDToTypeID("Hrzn");
    var idPxl = charIDToTypeID("#Pxl");
    desc3.putUnitDouble(idHrzn, idPxl, 0.000000);
    var idVrtc = charIDToTypeID("Vrtc");
    var idPxl = charIDToTypeID("#Pxl");
    desc3.putUnitDouble(idVrtc, idPxl, 0.000000);
    var idOfst = charIDToTypeID("Ofst");
    desc2.putObject(idOfst, idOfst, desc3);
    var idWdth = charIDToTypeID("Wdth");
    var idPrc = charIDToTypeID("#Prc");
    desc2.putUnitDouble(idWdth, idPrc, scale);
    var idHght = charIDToTypeID("Hght");
    var idPrc = charIDToTypeID("#Prc");
    desc2.putUnitDouble(idHght, idPrc, scale);
    var idAntA = charIDToTypeID("AntA");
    desc2.putBoolean(idAntA, true);
    executeAction(idPlc, desc2, DialogModes.NO);

    }
    catch (e) { }
}//end function placeFile  

1 Ответ

0 голосов
/ 27 января 2019

Никогда не рассчитывайте на функции списка файлов, чтобы поддерживать логический порядок ...

Попробуйте отсортировать списки файлов после их создания.

var list1 = folder1.getFiles(searchMask);
var list2 = folder2.getFiles(searchMask);
list1.sort();
list2.sort();

Убедитесь, что имена файлов сортируются асбетически.Zerofix, если вы используете числа.

В качестве альтернативы, вы можете снабдить Array.sort() функцией сортировки, чтобы обеспечить возможность пользовательской сортировки.Узнайте больше о том, как это работает здесь .

...