skip to Main Content

So I have these 28 *.tif image files as 28 layers (smart objects) I have arranged in a .psd file and wish to replace each layer with another .tif file. I wish to run some script(jsx) with loop something like this :

for (i=1;i<=28;i++) {
  for j in (start,end) {
     for k in (a,b,c,d,e,f) {
            file = 'chr' + $i + '_' + $j + '_' + $k;
                     }}}

update July2020: sorry for this late, I had found one solution and was like this, you first should download json2.js :

// replace smart object’s content and save psd;
#target photoshop
#include json2.js
if (app.documents.length > 0) {
  var myDocument = app.activeDocument;
  var theName = myDocument.name.match(/(.*).[^.]+$/)[1];
  var thePath = myDocument.path;

  psdOpts = new PhotoshopSaveOptions();
  psdOpts.embedColorProfile = true;
  psdOpts.alphaChannels = true;
  psdOpts.layers = true;
  psdOpts.spotColors = true;

//lists for desired filename input 
    var ppath = "c:/here/goes/file/path/for/taking/input/file";
// (you can implement using json too)
       var num = [
      "2",
      "3",
      "4",
      "5",
      "6",
      "7",
      "8",
      "9",
      "10",
      "11",
      "12",
      "13",
      "14",
      "15",
      "16",
      "17",
      "18",
      "19",
      "20",
      "21",
      "22",
      "X",
      "Y"
    ];
    var nnum = [
      "1",
      "2",
      "3",
      "4",
      "5",
      "6",
      "7",
      "8",
      "9",
      "10",
      "11",
      "12",
      "13",
      "14",
      "15",
      "16",
      "17",
      "18",
      "19",
      "20",
      "21",
      "22",
      "X"
    ];
    var lletter = [
      "q",
      "p",
      "o",
      "n",
      "m",
      "l",
      "u",
      "t",
      "k",
      "j",
      "i",
      "h",
      "g",
      "f",
      "d",
      "c",
      "b",
      "ae",
      "ad",
      "ac",
      "ab",
      "aa",
      "a",
      "z",
      "y",
      "x",
      "w",
      "v"
    ];
    var letter = [
      "q",
      "p",
      "o",
      "n",
      "m",
      "l",
      "u",
      "t",
      "k",
      "j",
      "i",
      "h",
      "g",
      "f",
      "d",
      "c",
      "b",
      "ae",
      "ad",
      "ac",
      "ab",
      "aa",
      "a",
      "z",
      "y",
      "x",
      "w",
      "v"
    ];
  
// main code starts here : 

      for (var i in num) {
        saveJPEG(thNamer);
        alert("saved Jpeg");
        myDocument.saveAs((new File("D:\thesis-bioinformatics" + '/vol-ID/' + thNamer + "_" +".psd")),psdOpts,true);
        alert("saved psd");
        
          for (var k in letter) {
            var TitleGroup = myDocument.layerSets.getByName('chr_place_plot_');
            var TitleGroup2 = myDocument.layerSets.getByName('chr_text');
           
            var thNamer = 'chr' + num[i] + '_start' + '_plot_';
            var thNames = 'chr' + num[i] + '_start' + '_plot_' + letter[k];
            var thprevNames = 'chr' + nnum[i] + '_start' + '_plot_' + letter[k];
            VolLayer = TitleGroup.artLayers.getByName(thprevNames);
            VolLayer2 = TitleGroup2.artLayers.getByName('Chr1');
           
            myDocument.activeLayer = VolLayer;
            var theFiles = ppath + thNames + '.tif';
          
          if (theFiles && thprevNames != thNames) 
          {         
            VolLayer = replaceContents(theFiles);
            VolLayer2.textItem.contents = thNamer;
            }

      }
    }
};  

2

Answers


  1. Chosen as BEST ANSWER

    This will take input in JSON and replace text and similarly can be made to replace images giving the file path.

    What it does is simply look for the layer group and then replace the content with the text or the file of your choice then save the jpg and PSD file in an output folder.

    You can see the code here: https://github.com/avialxee/photoshop-jsx

    
    #target photoshop
    #include json2.js // json to js parser
    
    
    if (app.documents.length > 0) {
        var myDocument = app.activeDocument;
        var theName = myDocument.name.match(/(.*).[^.]+$/)[1];
        var thePath = myDocument.path;
        var outpath = thePath+'/output/';
        
        psdOpts = new PhotoshopSaveOptions();
        psdOpts.embedColorProfile = true;
        psdOpts.alphaChannels = true;
        psdOpts.layers = true;
        psdOpts.spotColors = true;
    
    
        var obj = loadInput('inputs.json')
    
        function loadInput(relpath){
            var input = new File($.fileName);
            var jsoninput = new File(input.path + '/' + relpath);
    
            jsoninput.open('r');
            var name = jsoninput.read();
            jsoninput.close();
    
            return JSON.parse(name);
        }
    
    
        
        for (var i in obj.name) {
            
            var TitleGroup = myDocument.layerSets.getByName('baseImage');
            var TitleGroup2 = myDocument.layerSets.getByName('text');
            var thNamer = obj.name[i];
            VolLayer = TitleGroup2.artLayers.getByName('participantName');
            myDocument.activeLayer = VolLayer;
            //var theFiles = ppath + thNamer + '.tif';
            
            if (thNamer) {
                //VolLayer = replaceContents(theFiles);
                VolLayer.textItem.contents = thNamer;
                saveJPEG(thNamer);
                alert("saved Jpeg");
                myDocument.saveAs((new File(outpath+ thNamer + "_" + ".psd")), psdOpts, true);
                
            }      
        }
    };
    
    
    
    
    function getFiles(theFile) {
        if (theFile.name.match(/.(psd|tif)$/i)) {
            return true
        };
    };
    
    function replaceContents(newFile) {
        var idplacedLayerReplaceContents = stringIDToTypeID("placedLayerReplaceContents");
        var desc3 = new ActionDescriptor();
        var idnull = charIDToTypeID("null");
        desc3.putPath(idnull, new File(theFiles));
        var idPgNm = charIDToTypeID("PgNm");
        desc3.putInteger(idPgNm, 1);
        executeAction(idplacedLayerReplaceContents, desc3, DialogModes.NO);
    };
    
    function saveJPEG(name) {
        var doc = app.activeDocument;
        var file = new File(outpath + name + '.Jpg');
        var opts = new JPEGSaveOptions();
        opts.quality = 10;
        doc.saveAs(file, opts, true);
    }
    

  2. Try This Code

    It’ll loop through all layers and will replace it with the .tiff file you’ll choose

    var doc = app.activeDocument;
    
    function editContent() {
    
    cTID = function(s) { return app.charIDToTypeID(s); };
    sTID = function(s) { return app.stringIDToTypeID(s); };
    
    function Rename() {
      // Edit Contents
      function step1(enabled, withDialog) {
        if (enabled != undefined && !enabled)
          return;
        var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
        var desc1 = new ActionDescriptor();
        executeAction(sTID('placedLayerEditContents'), desc1, dialogMode);
      };
    
      step1();      // Edit Contents
    };
    
    Rename.main = function () {
      Rename();
    };
    
    Rename.main();
    
        }
    
    function merge() {
        var fileRef = File.openDialog ('Choose File', ['*.tif;*tiff'], true);
        app.open( new File( fileRef ) );
        if(app.activeDocument.activeLayer.isBackgroundLayer ) app.activeDocument.activeLayer.name = 'From Background';    
        app.activeDocument.selection.selectAll();
        app.activeDocument.selection.copy();
        app.activeDocument.selection.deselect();
    
    
        var idMk = charIDToTypeID( "Mk  " );
        var desc8946 = new ActionDescriptor();
        var idnull = charIDToTypeID( "null" );
            var ref1324 = new ActionReference();
            var idBckL = charIDToTypeID( "BckL" );
            ref1324.putClass( idBckL );
        desc8946.putReference( idnull, ref1324 );
        var idUsng = charIDToTypeID( "Usng" );
            var ref1325 = new ActionReference();
            var idLyr = charIDToTypeID( "Lyr " );
            var idOrdn = charIDToTypeID( "Ordn" );
            var idTrgt = charIDToTypeID( "Trgt" );
            ref1325.putEnumerated( idLyr, idOrdn, idTrgt );
        desc8946.putReference( idUsng, ref1325 );
    executeAction( idMk, desc8946, DialogModes.NO );
    
    
    
        app.activeDocument.close(SaveOptions.SAVECHANGES);
        app.activeDocument.artLayers.add();
        app.activeDocument.paste();
        app.activeDocument.flatten();
        app.activeDocument.close(SaveOptions.SAVECHANGES);
        }
    
    for (var i=0;i<doc.layers.length;i++){ 
        doc.activeLayer=doc.layers[i];
        editContent();
        merge();
        }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search