Photoshop Скриптинг JavaScript перебор слоев проблема

#javascript #photoshop-script

#javascript #photoshop-скрипт

Вопрос:

У меня есть скрипт, который выполняет следующее:

перебирает слои, сохраняет каждый слой в отдельной папке (имя папки совпадает с именем слоя) сохраненные изображения слоев имеют имена «nameofthedocument, nameofthelayer.png»

Теперь я хотел добавить текстовый элемент поверх этих слоев, пока они сохраняются как отдельные png, чтобы, ради бога, вам не нужно было всегда смотреть на имя файла, но вместо этого в растрированном изображении PNG был текст с надписью «nameofthelayer» переменная.

Поэтому для каждого слоя, конечно, в изображение должен быть вставлен другой текст.

я столкнулся со странными проблемами, когда попытался сделать то, что seamigly выглядело просто.

Вот ссылка с видео и объяснением кода, а также того, что я сделал и почему это испортило сценарий. https://drive.google.com/drive/folders/1h2KAiEuruLY_PQ2JVhQAwINDYPvk9xHS?usp=sharing

Спасибо, ребята, пожалуйста, помогите мне с объяснением кода, изображений и видео, все доступно по ссылке

код:

 // NAME: 
//  SaveLayers

// DESCRIPTION: 
//  Saves each layer in the active document to a PNG or JPG file named after the layer. 
//  These files will be created in the current document folder.

// REQUIRES: 
//  Adobe Photoshop CS2 or higher

// VERSIONS:
//  27 March 2013 by Robin Parmar (robin@robinparmar.com)
//      preferences stored in object
//      auto-increment file names to prevent collisions
//      properly handles layer groups
//      header added
//      code comments added
//      main() now has error catcher
//      counts number of layers
//      many little code improvements

//  26 Sept 2012 by Johannes on stackexchange
//      original version

// enable double-clicking from Finder/Explorer (CS2 and higher)
#target photoshop
app.bringToFront();


//alert(activeDocument.name);

function main() {
    // two quick checks
    if(!okDocument()) {
        alert("Document must be saved and be a layered PSD.");
        return; 
    }

    var len = activeDocument.layers.length;
   
    // user preferences
    prefs = new Object();
    prefs.fileType = "";
    prefs.fileQuality = 0;
    prefs.filePath = app.activeDocument.path;
    prefs.count = 0;

      
    saveLayers(activeDocument);
    //toggleVisibility(activeDocument);
    
}

function saveLayers(ref) {
    var len = ref.layers.length;

    // rename layers top to bottom
    for (var i = 0; i < len; i  ) {
        var layer = ref.layers[i];
 
        if (layer.typename == 'LayerSet') {
            // recurse if current layer is a group
            saveLayers(layer);
        } else {
            // otherwise make sure the layer is visible and save it
            layer.visible = true;
            saveImage(layer.name);
            layer.visible = false;
        }
    }
}


function getNameWithoutExtension(nameWithExt) {
    var nameWithoutExtension = nameWithExt;
    return nameWithoutExtension.split(".")[0];
}

function saveImage(layerName) {
    var f = new Folder("D:/Process/0/" layerName);  
    f.create();
    
    
    
    



//////////////// BROKEN PART I ADDED

    
    #target photoshop
// Current layer name as text layer
var myDoc = app.activeDocument;
var myRulers = app.preferences.rulerUnits
app.preferences.rulerUnits = Units.PIXELS;
var OriginalLayerName = myDoc.activeLayer.name
var myLayerName = myDoc.activeLayer.name   "text";
var myLayerText = myDoc.artLayers.add()
myLayerText.kind = LayerKind.TEXT
var myText = myLayerText.textItem
myColor = new SolidColor
myColor.rgb.red = 255
myColor.rgb.green = 0
myColor.rgb.blue = 0
myLayerText.textItem.color = myColor
myText.position = [0,20] // Upper Left
myText.justification = Justification.LEFT
myText.size = 12
myText.contents = myLayerName
myLayerText.name = myLayerName // Or add a fixed string in quotes i.e. 'My Great Layer Name!'
app.preferences.rulerUnits = myRulers

//////////////////////////////END OF THE BROKN PART


    
    
    //var handle = generateName(f.path   "/",layerName, ".png");
    //alert(handle);
    var handle = getUniqueName(prefs.filePath   "/"  layerName  "/"  getNameWithoutExtension(activeDocument.name)   ", "   layerName);
    //alert(handle);
    prefs.count  ;
    
    if(prefs.fileType=="PNG") {
        SavePNG(handle); 
    } else {
        SaveJPEG(handle); 
    }
}

function getUniqueName(fileroot) { 
    // form a full file name
    // if the file name exists, a numeric suffix will be added to disambiguate
    
    var filename = fileroot;
    for (var i=1; i<100; i  ) {
        var handle = File(filename   "."   prefs.fileType); 
        if(handle.exists) {
            filename = fileroot   "-"   padder(i, 3);
        } else {
            return handle; 
        }
    }
}



function padder(input, padLength) {
    // pad the input with zeroes up to indicated length
    var result = (new Array(padLength   1 - input.toString().length)).join('0')   input;
    return resu<
}

function SavePNG(saveFile) { 
    pngSaveOptions = new PNGSaveOptions(); 
    activeDocument.saveAs(saveFile, pngSaveOptions, true, Extension.LOWERCASE); 
} 

function SaveJPEG(saveFile) {
    pngSaveOptions = new PNGSaveOptions(); 
    activeDocument.saveAs(saveFile, pngSaveOptions, true, Extension.LOWERCASE); 
} 







   // file type
    var saveOpt = [];
    saveOpt[0] = "PNG"; 
    saveOpt[1] = "PNG"; 
    



    // png type
    var pngtypeOpt = [1];
    pngtypeOpt[0]=24;
    pngtypeOpt[1]=24;






function okDocument() {
     // check that we have a valid document

    if (!documents.length) return false;

    var thisDoc = app.activeDocument; 
    var fileExt = decodeURI(thisDoc.name).replace(/^.*./,''); 
    return fileExt.toLowerCase() == 'psd'
}

function wrapper() {
    function showError(err) {
        alert(err   ': on line '   err.line, 'Script Error', true);
    }

    try {
        // suspend history for CS3 or higher
        if (parseInt(version, 10) >= 10) {
            activeDocument.suspendHistory('Save Layers', 'main()');
        } else {
            main();
        }
    } catch(e) {
        // report errors unless the user cancelled
        if (e.number != 8007) showError(e);
    }
}


function generateName(filePath, layerName, ext) {
    var generatedName = app.activeDocument.name;
    var generatedName = generatedName.split(".")[0];
    generatedName = generatedName   ", "   layerName;
    return filePath   generatedName   ext;
}


wrapper();
  

Комментарии:

1. Я сделал, я только что сделал это