In red..
// First thing is to set up what setting will be used in the rest of the script
// but save them so they can be reset to what they were before this script is ran.
displayDialogs = DialogModes.NO;
var defaultRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
// Define Colors
var black = new SolidColor();
black.rgb.red = black.rgb.green = black.rgb.blue = 0;
var white = new SolidColor();
white.rgb.red = white.rgb.green = white.rgb.blue = 255;
var red = new SolidColor();
red.rgb.red = 255;
red.rgb.green = red.rgb.blue = 0;
var landscape = false; // just in case its square !
var TextLine = "";
///
/// User default presets
///
///
var complete_flatten = false; // Set this to true and all layers will be flattened at the end
// User colour values
var user_colour_1 = new SolidColor();
user_colour_1.rgb.red = 200;
user_colour_1.rgb.green = 100;
user_colour_1.rgb.blue = 100;
var user_colour_2 = new SolidColor();
user_colour_2.rgb.red = 100;
user_colour_2.rgb.green = 200;
user_colour_2.rgb.blue = 100;
// Picture size
var PictureWidth = 3072;
var PictureHeight = 2304;
var PictureResolution = 72;
// Boarder defaults
var BoarderColor = black; // white, black, red, user_colour_1 OR user_colour_2 (see above)
var StrokeColor = white; // white, black, red, user_colour_1 OR user_colour_2 (see above)
var BoarderWidth = 50;
var StrokeWidth = 3;
// Additional text defaults
var TextColour = white; // white, black, red, user_colour_1 OR user_colour_2 (see above)
var TextCopyrightStart = "Copyright \xA9 "; // include \xA9 for copyright symbol
var TextCopyright = "xxxxx.";
var TextBold = true;
var TextFont = "CenturyOldStyleStd-Italic";
var TextSize = 15;
// Show information ?
var DisplayTop = true;
var DisplayLeft = true;
var DisplayRight = true;
var DisplayBottom = true;
// Defaults regarding year displayed in copyright notice
var UseExifYear = true;
var TextCopyrightYear = "2008"; // When UseExifYear is false (c) year is set to this....
// Defaults relating to display of the filename
var ShowExtension = false; // If you wish to show the file extension, change the n to y in the line below, if not use n.
var TextBefore = ""; // Text displayed before filename on top line
var TextAfter = ""; // Text displayed after filename on top line
// Exif data to display
var EXblanklinefornonexif = true; // If true then non exif pictures will have blank line otherwise it will add "non EXIF data"
var EXcameramodel = true;
var EXfstop = true;
var EXfocal = true;
var EXshutterspeed = true;
var EXiso = true;
var EXlens = true;
var EXexposurebiasvalue = false;
var EXfilmeq = false;
var EXgaincontrol = false;
var EXmeteringmode = false;
var EXlightsource = false;
var EXphotime =false;
var EXwhitebalance = false;
var EXaperturevalue = false;
var EXexptime = false;
var EXmaxaperturevalue = false;
var EXflash = false;
var EXcolourspace = false;
var EXsensingmethod = false;
var EXexposuremode = false;
// Displaying copyright TEXT
var DisplayCopyrightText = false;
var CT_Text = "This image is \xA9 xxx"; // include \xA9 for copyright symbol
var CT_X = 50; // Percentage
var CT_Y = 50; // Percentage
var CT_Angle = 65;
var CT_Colour = user_colour_2; // white, black, red, user_colour_1 OR user_colour_2 (see above)
var CT_Transparency = 50;
var CT_Bold = true;
var CT_Size = 20;
var CT_Font = "CenturyOldStyleStd";
// Displaying copyright IMAGE
var DisplayCopyrightImage = false;
var IM_Name = "~/Documents/Signature.png";
var IM_X = 10; // Percentage
var IM_Y = 10; // Percentage
var IM_percentage = 20; // Height as a Percentage
var IM_Transparency = 100;
// =========================================================================================================================
//
// This is the main part of the script........
//
// =========================================================================================================================
//
var AD = app.activeDocument;
PrepImage();
AD.flatten(); //This puts all the layers back together
// Now each of the bits of text will be another layer
// if you do not want them as seperate layers you can move the AD.flatten(); command to below the 4 if commands
if (DisplayLeft) {ImageDataTextLeft(getExifDate()) **;
if (DisplayRight) {ImageDataTextRight(TextCopyrightStart+getExifYear()+" "+TextCopyright) **;
if (DisplayBottom) {ImageDataTextBottom(getExifData()) **;
if (DisplayTop) {ImageDataTextTop() **;
if (DisplayCopyrightText){addcopyrighttext() **;
if (DisplayCopyrightImage){addcopyrightimage() **;
if (complete_flatten){AD.flatten();**;
// =========================================================================================================================
//
// This is the main part of the script........
//
// =========================================================================================================================
//
function addcopyrightimage() **
var signature_file,filename
//alert("Copyright Image: Give me a chance !!!!!");
var docRef = activeDocument;
filename = new File(File.encode(IM_Name));
// filename = File.openDialog("Select file");
// alert(filename);
if(typeof filename.open == "undefined") {alert("Signature file [" + IM_Name +"] is not a file or doesn't exist")**;
signature_file = open( filename );
var orig_ruler_units = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
// make signature file the active document
app.activeDocument = signature_file;
// resize this
var AD = app.activeDocument;
AD.resizeImage(AD.width.value*IM_percentage/100*PictureWidth/AD.width.value,
AD.height.value*IM_percentage/100*PictureWidth/AD.width.value,
AD.resolution*IM_percentage/100);
var sig_width = AD.width.value;
var sig_height = AD.height.value;
// Copy it and then close the document
signature_file.activeLayer.copy();
signature_file.close(SaveOptions.DONOTSAVECHANGES);
app.activeDocument=docRef;
var myLayerRef = docRef.artLayers.add();
myLayerRef.kind = LayerKind.NORMAL;
myLayerRef.name = "Copyright Image";
var x1 = PictureWidth*IM_X/100;
var x2 = x1 + sig_width;
var y1 = PictureHeight*IM_Y/100;
var y2 = y1 + sig_height;
var IMregion = Array(Array(x1, y1),Array(x2, y1),Array(x2, y2),Array(x1, y2));
docRef.selection.select(IMregion);
docRef.paste() ;
myLayerRef.opacity = IM_Transparency;
app.preferences.rulerUnits = orig_ruler_units;
**
function addcopyrighttext()**
var docRef = activeDocument;
var myLayerRef = docRef.artLayers.add();
myLayerRef.kind = LayerKind.TEXT;
myLayerRef.name = "Copyright Notice";
var myTextRef = myLayerRef.textItem;
myTextRef.size = CT_Size;
myTextRef.font = CT_Font;
myTextRef.color = CT_Colour;
myTextRef.fauxBold = CT_Bold;
myTextRef.position = [ CT_X*PictureWidth/100, CT_Y*PictureHeight/100 ];
myLayerRef.blendMode = BlendMode.NORMAL;
myLayerRef.opacity = CT_Transparency;
myTextRef.contents = CT_Text;
AD.activeLayer.rotate(-CT_Angle,AnchorPosition.BOTTOMLEFT); // rotate the text
**
function PrepImage() **
// Set resolution to 72dpi for monitor viewing
var resRatio = AD.resolution/PictureResolution;
if(resRatio!=1)**
AD.resizeImage(AD.width.value,AD.height.value,PictureResolution);
**
// checking resizeCanvasif landscape and if so, set width to 800 and height to proportionate value
if(AD.width.value>AD.height.value)**
landscape = true;
if(AD.width.value>PictureWidth){AD.resizeImage((PictureWidth-(BoarderWidth+StrokeWidth)), AD.height.value/AD.width.value*(PictureWidth-(BoarderWidth+StrokeWidth))); **
**
// checking if portrait and if so, set width to 800 and height to proportionate value
if(AD.height.value>AD.width.value)**
landscape = false;
if(AD.height.value>PictureHeight){AD.resizeImage(AD.width.value/AD.height.value*(PictureHeight-(BoarderWidth+StrokeWidth)),(PictureHeight-(BoarderWidth+StrokeWidth))); **
**
// Create stoke by increasing the canvas size
backgroundColor = StrokeColor;
AD.resizeCanvas(AD.width+StrokeWidth,AD.height.value+StrokeWidth,AnchorPosition.MIDDLECENTER);
// Create boarder by increasing the canvas size
backgroundColor = BoarderColor;
AD.resizeCanvas(AD.width+BoarderWidth,AD.height.value+BoarderWidth,AnchorPosition.MIDDLECENTER);
**
function ImageDataTextRight(strData) **
var nameLayer = AD.artLayers.add();
nameLayer.kind = LayerKind.TEXT;
var TI = nameLayer.textItem;
TI.position = [AD.width.value - 4, AD.height.value - 25];
TI.contents = strData+" ";
TI.font = TextFont;
TI.size = TextSize;
TI.tracking = 180;
TI.color = TextColour;
TI.fauxBold = TextBold;
AD.activeLayer.rotate(-90,AnchorPosition.BOTTOMLEFT); // rotate the text
**
function ImageDataTextLeft(strData) **
var nameLayer = AD.artLayers.add();
nameLayer.kind = LayerKind.TEXT;
var TI = nameLayer.textItem;
TI.position = [15, AD.height.value - 25];
TI.contents = strData+" ";
TI.font = TextFont;
TI.size = TextSize;
TI.tracking = 180;
TI.color = TextColour;
TI.fauxBold = TextBold;
AD.activeLayer.rotate(-90,AnchorPosition.BOTTOMLEFT); // rotate the text
**
function ImageDataTextBottom(strData) **
//var tmpString = new String(strData);
var infoLayer = AD.artLayers.add();
infoLayer.kind = LayerKind.TEXT;
var TI = infoLayer.textItem;
TI.position = [20, AD.height.value - 5];
TI.contents = strData+" ";
TI.font = TextFont;
TI.size = TextSize;
TI.tracking = 50;
TI.color = TextColour;
TI.fauxBold = TextBold;
**
function ImageDataTextTop(strData) **
//Check if a document is open
if ( documents.length > 0 )
**
var originalRulerUnits = preferences.rulerUnits;
preferences.rulerUnits = Units.PERCENT;
try
**
var docRef = activeDocument;
// Create a text layer at the front
var myLayerRef = docRef.artLayers.add();
myLayerRef.kind = LayerKind.TEXT;
myLayerRef.name = "Filename";
var myTextRef = myLayerRef.textItem;
myTextRef.size = TextSize;
myTextRef.font = TextFont;
myTextRef.color = TextColour;
myTextRef.fauxBold = TextBold;
// Set the position of the text - percentages from left first, then from top.
myTextRef.position = new Array( 2, 1.5);
if(landscape) {myTextRef.position = new Array( 2, 2.3);**
// Set the Blend Mode of the Text Layer. The name must be in CAPITALS - ie change NORMAL to DIFFERENCE.
myLayerRef.blendMode = BlendMode.NORMAL;
// select opacity in percentage
myLayerRef.opacity = 100;
// The following code strips the extension and writes tha text layer. fname = file name only
di=(docRef.name).indexOf(".");
fname = (docRef.name).substr(0, di);
//use extension if set
if (ShowExtension) {fname = docRef.name**
myTextRef.contents = TextBefore + " " + fname + " " + TextAfter;
**
catch( e )
**
// An error occurred. Restore ruler units, then propagate the error back
// to the user
preferences.rulerUnits = originalRulerUnits;
throw e;
**
// Everything went Ok. Restore ruler units
preferences.rulerUnits = originalRulerUnits;
**
else {alert( "You must have a document open to add the filename!" ); **
**
// Sets image data to a string that will later be used to set into the image
function getExifData() **
// Get exif data from file
var exifData = AD.info.exif.toString();
// Use this function to put string into array.
// Returns tempArray
var exifDataArray = explodeArray(exifData,",");
if(exifData == "")**
if(EXblanklinefornonexif){return " ";**else{return "Non EXIF data";**
**else{
// Get the info I want
for(n = 0; n < exifDataArray.length; n = n + 1 ) **
var stringTemp=exifDataArray[n]
// alert(n + ": " + stringTemp); //Show what's coming out of array
if(stringTemp.indexOf("Date Time Original")!=-1)**
var phoTime = exifDataArray[n+1];
var dateArray1 = phoTime.split(" ", 1);
phoTime = dateArray1[0];
var dateArray2 = phoTime.split(":");
var monthsArray =["January","February","March","April","May","June","July","August","September","October","November","December"];
phoTime = monthsArray[dateArray2[1]-1]+" "+dateArray2[2]+" "+dateArray2[0];
**
if(stringTemp.indexOf("Exposure Time")!=-1){var expTime = exifDataArray[n+1]; **
if(stringTemp.indexOf("Model")!=-1){var cameraModel = exifDataArray[n+1]; **
if(stringTemp.indexOf("F-Stop")!=-1){var fstop = exifDataArray[n+1]; **
if(stringTemp.indexOf("Focal Length")!=-1){var focal = exifDataArray[n+1];**
if(stringTemp.indexOf("Shutter Speed")!=-1){var shutterspeed = exifDataArray[n+1];**
if(stringTemp.indexOf("Aperture Value")!=-1){var aperturevalue = exifDataArray[n+1];**
if(stringTemp.indexOf("Exposure Bias Value")!=-1){var exposurebiasvalue = exifDataArray[n+1];**
if(stringTemp.indexOf("Max Aperture Value")!=-1){var maxaperturevalue = exifDataArray[n+1];**
if(stringTemp.indexOf("Metering Mode")!=-1){var meteringmode = exifDataArray[n+1];**
if(stringTemp.indexOf("Light Source")!=-1){var lightsource = exifDataArray[n+1];**
if(stringTemp.indexOf("Flash")!=-1){var flash = exifDataArray[n+1];**
if(stringTemp.indexOf("Color Space")!=-1){var colorspace = exifDataArray[n+1];**
if(stringTemp.indexOf("Sensing Method")!=-1){var sensingmethod = exifDataArray[n+1];**
if(stringTemp.indexOf("Exposure Mode")!=-1){var exposuremode = exifDataArray[n+1];**
if(stringTemp.indexOf("White Balance")!=-1){var whitebalance = exifDataArray[n+1];**
if(stringTemp.indexOf("Gain Control")!=-1){var gaincontrol = exifDataArray[n+1]; **
if(stringTemp.indexOf("ISO Speed Ratings")!=-1){var iso = exifDataArray[n+1]; **
if(stringTemp.indexOf("Focal Length in 35mm Film")!=-1){var filmeq = exifDataArray[n+1]; **
** // End of For loop
// Raw xml data to extract lens info
// Only available on RAW images?
var xmldata = AD.xmpMetadata.rawData;
try **
var pattern = /(.*<aux:Lens>)(.*)(<\/aux:Lens>)/;
var results = xmldata.match(pattern);
if (results)
lens = results[2];
else {lens = "?"; EXlens = false;**
**
catch(err) **
lens = "?"; EXlens = false;
**
if(lens = "0.0 mm f/0.0")EXlens = false;
var strTemp = "";
if(EXcameramodel){strTemp = strTemp + cameraModel + " ";**
if(EXshutterspeed){strTemp = strTemp + shutterspeed + " ";**
if(EXfstop){strTemp = strTemp + fstop + " ";**
if(EXiso){strTemp = strTemp + " ISO:" + iso + " ";**
if(EXlens){strTemp = strTemp + " LENS:" + lens + " ";**
if(EXfocal){strTemp = strTemp + " Focal Length:" + focal + " ";**
if(EXaperturevalue){strTemp = strTemp + " Aperture Value:" + aperturevalue + " ";**
if(EXexposurebiasvalue){strTemp = strTemp + " Exposure Bias Value:"+ exposurebiasvalue + " ";**
if(EXgaincontrol){strTemp = strTemp + " Gain Control:"+ gaincontrol + " ";**
if(EXmaxaperturevalue){strTemp = strTemp + " Max Aperture Value:"+ maxaperturevalue + " ";**
if(EXmeteringmode){strTemp = strTemp + " Metering Mode:"+ meteringmode + " ";**
if(EXfilmeq){strTemp = strTemp + " 35mm Equivakent:"+ filmeq + "mm ";**
if(EXlightsource){strTemp = strTemp + " Lightsource:"+ lightsource + " ";**
if(EXflash){strTemp = strTemp + " Flash:"+ flash + " ";**
if(EXcolourspace){strTemp = strTemp + " Colour Mode:"+ colorspace + " ";**
if(EXsensingmethod){strTemp = strTemp + " Sensing Method:"+ sensingmethod + " ";**
if(EXexposuremode){strTemp = strTemp + " Exposure Mode:"+ exposuremode + " ";**
if(EXwhitebalance){strTemp = strTemp + " White Balance:"+ whitebalance + " ";**
if(EXexptime){strTemp = strTemp + " Exposure Time:" + expTime + " ";**
if(EXphotime){strTemp = strTemp + " Date & Time:" + phoTime + " ";**
return strTemp;
**
**
// Extract date from Exif Data
function getExifDate() **
// Get exif data from file
var exifData = AD.info.exif.toString();
// Use this function to put string into array.
// Returns tempArray
var exifDataArray = explodeArray(exifData,",");
if(exifData == "")**
return " ";
**
else
**
// Get the info I want
for(n = 0; n < exifDataArray.length; n = n + 1 ) **
var stringTemp=exifDataArray[n]
// alert(n + ": " + stringTemp); //Show what's coming out of array
if(stringTemp.indexOf("Exposure Time")!=-1)**
var expTime = exifDataArray[n+1];
**
if(stringTemp.indexOf("Date Time Original")!=-1)**
var phoTime = exifDataArray[n+1];
var dateArray1 = phoTime.split(" ", 1);
phoTime = dateArray1[0];
var dateArray2 = phoTime.split(":");
var monthsArray =["January","February","March","April","May","June","July","August","September","October","November","December"];
phoTime = monthsArray[dateArray2[1]-1]+" "+dateArray2[2]+" "+dateArray2[0];
**
** // End of For loop
var strTemp = phoTime;
return strTemp;
**
**
// Extract year from Exif Data
function getExifYear() **
var exifData = AD.info.exif.toString();
var exifDataArray = explodeArray(exifData,",");
var ExifYear = TextCopyrightYear;
for(n = 0; n < exifDataArray.length; n = n + 1 ) **
var stringTemp=exifDataArray[n]
if(stringTemp.indexOf("Exposure Time")!=-1)**
var expTime = exifDataArray[n+1];
**
if(stringTemp.indexOf("Date Time Original")!=-1)**
var phoTime = exifDataArray[n+1];
var dateArray1 = phoTime.split(" ", 1);
phoTime = dateArray1[0];
var dateArray2 = phoTime.split(":");
if(UseExifYear)**
ExifYear = dateArray2[0];
**
**
** // End of For loop
var strTemp = ExifYear;
return strTemp;
**
function NotBlank(strData) **
if(strData = ""){TextLine=" "**;
**
// Save File
function SaveJPEG(inFileName) **
var jpegOptions = new JPEGSaveOptions();
jpegOptions.quality = 9;
activeDocument.saveAs( File( inFileName ), jpegOptions );
**
//function below credited to 'bradles' over at the Adobe User to User forums.
function explodeArray(item,delimiter) **
tempArray=new Array(1);
var Count=0;
var tempString=new String(item);
while (tempString.indexOf(delimiter)>0) **
tempArray[Count]=tempString.substr(0,tempString.indexOf(delimiter));
tempString=tempString.substr(tempString.indexOf(delimiter)+1,tempString.length-tempString.indexOf(delimiter)+1);
Count=Count+1
**
tempArray[Count]=tempString;
return tempArray;
**