Photoshop automati c заменяет 2 умных слоя из любой другой папки - PullRequest
0 голосов
/ 24 марта 2020

Я создаю скрипт для автоматов c заменяю один смарт-объект в документе, но мне нужно заменить 3 различных смарт-объекта в документе и сохранить в одном файле jpg. Вы можете помочь мне? У меня есть этот скрипт

#target photoshop
if (app.documents.length > 0) {
var myDocument = app.activeDocument;
var theName = myDocument.name.match(/(.*)\.[^\.]+$/)[1];

var theLayer = myDocument.activeLayer;
// JPG Options;
jpgSaveOptions = new JPEGSaveOptions();  
jpgSaveOptions.embedColorProfile = true;  
jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;  
jpgSaveOptions.matte = MatteType.NONE;  
jpgSaveOptions.quality = 12;

// Check if layer is SmartObject;
if (theLayer.kind != "LayerKind.SMARTOBJECT") {
    alert("selected layer is not a smart object")
} else {

 // Select Files;
    if ($.os.search(/windows/i) != -1) {
        var theFiles = File.openDialog("please select files", "*.ai;*.eps;*.psd;*.tif;*.jpg;*.png", true)
    } else {
        var theFiles = File.openDialog("please select files", getFiles, true)
    };
};

var outputFolder = Folder.selectDialog("Choose folder to save files to");
    if (theFiles) {
        for (var m = 0; m < theFiles.length; m++) {
 // Replace SmartObject
            theLayer = replaceContents(theFiles[m], theLayer);
            var theNewName = theFiles[m].name.match(/(.*)\.[^\.]+$/)[1];
            // Save JPG
            myDocument.saveAs((new File(outputFolder+ "/" + theName + "_" + theNewName + ".jpg")), jpgSaveOptions, true,Extension.LOWERCASE);

        }
    }
};

// Get PSDs, TIFs and JPGs from files
function getFiles(theFile) {
if (theFile.name.match(/\.(psd|tif|jpg)$/i) != null || theFile.constructor.name == "Folder") {
    return true
 }
};

// Replace SmartObject Contents
function replaceContents(newFile, theSO) {
app.activeDocument.activeLayer = theSO;
 // =======================================================
var idplacedLayerReplaceContents = stringIDToTypeID("placedLayerReplaceContents");
var desc3 = new ActionDescriptor();
var idnull = charIDToTypeID("null");
desc3.putPath(idnull, new File(newFile));
var idPgNm = charIDToTypeID("PgNm");
desc3.putInteger(idPgNm, 1);
executeAction(idplacedLayerReplaceContents, desc3, DialogModes.NO);
return app.activeDocument.activeLayer
};

alert("Mission complete");

, возможно, нужно создать меню выбора для смарт-объекта, или как я могу это сделать? Пожалуйста, скажите мне, что мне нужно добавить в сценарий? Спасибо за ваше время

...