Skip to main content
Participant
May 10, 2017
Question

Watermark Script

  • May 10, 2017
  • 1 reply
  • 5401 views

Hi! I am in Photoshop now and would like to make an script for placing watermarks so that they take up 10% of the width of the image and are placed so that they are 3% in from the left and 3% from the bottom on the canvas. How do I do this?

This topic has been closed for replies.

1 reply

JJMack
Community Expert
Community Expert
May 10, 2017

It should be easy to modify the script I have posted it places the watermark on the bottom right not the left.  You would need to change the last transform..

#target photoshop; 

app.bringToFront(); 

var logoFile = "~/Desktop/JJMack.png"; // Watermark file should be large for resize down works better than up

var LogoSize = 10; // percent of document height to resize Watermark to

var LogoMargin = 1;                                         // percent of Document height the Watermark should have as a margin

placeWatermark(logoFile, LogoSize, LogoMargin);             // Place Watermark  into the bottom right of document

function placeWatermark(Image,Size,Margin){ 

  if(!documents.length) return;   // if no document return

  try{ 

  var doc = app.activeDocument; // set Doc object to active document

  app.displayDialogs = DialogModes.NO; // Dialog off

  var strtRulerUnits = app.preferences.rulerUnits; // Save Users ruler units

  var strtTypeUnits = app.preferences.typeUnits; // Save Users Type units

  app.preferences.rulerUnits = Units.PIXELS; // work with pixels

  app.preferences.typeUnits = TypeUnits.PIXELS; // work with pixels

  var fileObj = new File(Image);                 // the passed file

  if(!fileObj.exists){   // If file does not exits tell user

  alert(fileObj.name  + " does not exist!"); 

  return; 

  } 

  placeFile(fileObj); // Place in file the Watermark png file

  activeDocument.activeLayer.resize(100 ,100,AnchorPosition.MIDDLECENTER); // Insure Place did not scale layer 

  var SB = activeDocument.activeLayer.bounds; // get layers bounds

  var layerHeight = SB[3] - SB[1]; // get layers height 

  var resizePercent = (100/layerHeight)*(Size/100*doc.height.value); // Percent to resize by

  activeDocument.activeLayer.resize(resizePercent ,resizePercent,AnchorPosition.MIDDLECENTER);  // Resize width and height by percentage

  SB = activeDocument.activeLayer.bounds; // get resized layers bounds 

  activeDocument.activeLayer.translate(-SB[0].value,-SB[1].value); // Move resized layer to top left canvas corner

  var LayerWidth = (SB[2].value - SB[0].value); 

  var LayerHeight = (SB[3].value - SB[1].value); 

  marginSize = Margin/100*doc.height.value; // move resized watermark into the document lower right corner with some margin

  activeDocument.activeLayer.translate((doc.width.value -marginSize - LayerWidth),( doc.height.value -marginSize - LayerHeight));

  }

  catch(e) { alert(e + ': on line ' + e.line); } // inform user of error 

  finally{ 

  app.preferences.rulerUnits = strtRulerUnits; // Restore user ruler units 

  app.preferences.typeUnits = strtTypeUnits; // Restore user type units   

  }; 

};

function placeFile(placeFile) { 

    var desc21 = new ActionDescriptor(); 

    desc21.putPath( charIDToTypeID('null'), new File(placeFile) ); 

    desc21.putEnumerated( charIDToTypeID('FTcs'), charIDToTypeID('QCSt'), charIDToTypeID('Qcsa') ); 

    var desc22 = new ActionDescriptor(); 

    desc22.putUnitDouble( charIDToTypeID('Hrzn'), charIDToTypeID('#Pxl'), 0.000000 ); 

    desc22.putUnitDouble( charIDToTypeID('Vrtc'), charIDToTypeID('#Pxl'), 0.000000 ); 

    desc21.putObject( charIDToTypeID('Ofst'), charIDToTypeID('Ofst'), desc22 ); 

    executeAction( charIDToTypeID('Plc '), desc21, DialogModes.NO ); 

}; 

JJMack
Participant
May 10, 2017

Do you know if I could use a psd or ai file instead of the png so that it will come in with layers?

JJMack
Community Expert
Community Expert
May 10, 2017

You can use any image file type you want the watermark layer will be a single smart object layer.  The Laye embedded object can be a layered file like PSD , PSB or TIFF.  If  it is you can open the embedded object is Photoshop.  The disadvantage is the Layered embedded file will be larger then a flat file like png.  This will just make your watermark layered image file size  larger than need. IMO the no good reason to have a layered smart object.  You can of still have your Logo master file a layer file to make ir easy to update. IMO you should save a png file as well as your PSD and watermark using the PNG file not the layered file.

JJMack