• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

P: Print metadata on bottom of photo

Explorer ,
May 23, 2022 May 23, 2022

Copy link to clipboard

Copied

In the PRINT module in Lightroom, you can put metadata on the margin of the photo. Then you can physically print the photo with the metadata or save it to a PDF.

 

I'm looking to do the same except save it to JPEG. No luck so far. Any suggestions? Feature request to Adobe?

 

Tanya

 

 

Idea No status
TOPICS
macOS , Windows

Views

200

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

LEGEND , May 23, 2022 May 23, 2022

[This post contains formatting and embedded images that don't appear in email. View the post in your Web browser.]

 

In the Print Job panel in the right column of the Print module, set Print To: to JPEG File"

 

johnrellis_0-1653321462915.png

 

Votes

Translate

Translate
8 Comments
Explorer ,
May 23, 2022 May 23, 2022

Copy link to clipboard

Copied

Let me try again,

 

In the Print module in Lightroom, you can put metadata on the margin of the photo. You check off the "Print Info" box, then create a custom "text template" or chose one of the default presets. Then you can physically print the photo with the metadata or save it to a PDF.

 

I'm looking to do the same except save it to JPEG. No luck so far. Any suggestions? Feature request to Adobe?

 

Tanya

 

screenshot print template editor big.jpg

Votes

Translate

Translate

Report

Report
Explorer ,
May 23, 2022 May 23, 2022

Copy link to clipboard

Copied

A nice feature of using Lightroom to print the metadata under the photo(s) is that Lightroom prints all photos in the current folder or collection. Basically, batch mode without using a script.

 

Tanya

Votes

Translate

Translate

Report

Report
LEGEND ,
May 23, 2022 May 23, 2022

Copy link to clipboard

Copied

[This post contains formatting and embedded images that don't appear in email. View the post in your Web browser.]

 

In the Print Job panel in the right column of the Print module, set Print To: to JPEG File"

 

johnrellis_0-1653321462915.png

 

Votes

Translate

Translate

Report

Report
Explorer ,
May 23, 2022 May 23, 2022

Copy link to clipboard

Copied

Thank you. I overlooked Print Job.

However, it strips out all the metadata and you can't customize the filenames (like including the original name of the photo.) I don't see how to get around this. The export interface is much more accommodating.

Tanya

Votes

Translate

Translate

Report

Report
Community Expert ,
May 23, 2022 May 23, 2022

Copy link to clipboard

Copied

There are custom scripts for this, I'll look in my archive...

 

Edit:

 

This is the result of the Stamp Exif script:

StampEXIF.jpg

 

This is the result of the Stamp Exif 2.2 script, which adds a black frame rather than stamping the metadata directly onto the image:

StampEXIF-2_2.jpg

 

Votes

Translate

Translate

Report

Report
Community Expert ,
May 23, 2022 May 23, 2022

Copy link to clipboard

Copied

Sorry, I just realised that the link that I clicked wasn't to the Photoshop forum!

Votes

Translate

Translate

Report

Report
Explorer ,
May 26, 2022 May 26, 2022

Copy link to clipboard

Copied

Hi Stephan Marsh.

I'm open to finding different ways to put captions under images.

I found LR/mmogrify2 which is a Lightroom plug-in for the Export module.

Somebody wrote me a script calling exiftool and ImageMagic (what LR/mogrify2 is based on.)

Thought it wasn't possible to script Photoshop, to allow batch processing. Maybe I'm wrong.

What does your Stamp Exif 2.2 script use? Is it friendly for novices?

Votes

Translate

Translate

Report

Report
Community Expert ,
May 26, 2022 May 26, 2022

Copy link to clipboard

Copied

LATEST
quote

What does your Stamp Exif 2.2 script use? Is it friendly for novices?

 

It's not my script, just one that I harvested from somewhere back in 2005!

 

It's as friendly as any Photoshop JavaScripting is, so YMMV... I'm of course happy to modify the script for your needs if I am able to.

 

/*********************************************************************
  
  Stamp EXIF
  Version 2.2 - 23 Jan 2005
  ==================================================================
  Print EXIF info on picture layers (enlarging canvas), will use
  both standard EXIF data and image Caption data.
  You should active the copy of the Shooting data to the IPTC
  Caption field to let the script show info like lens used.
  
  To install copy this script into Photoshop Presets\Scripts folder.
  
  Freeware development by Fescar <fescar@email.it>
  If you would like to contribuite or simply need a feature,
  feel free to contact me.  In my "little" spare time I'll help.
  
  Big thanks to Regit Young, Joe Lorenzini, franz156, 3stones,
  lobster (DPR usernames) for their ideas and codes.
  
  This script is compatible with Photoshop CS.
  
*********************************************************************/


// ********************************
// *** Customize for your needs ***
// ********************************

// Set your copyright text here, the script will calculate automatically the "(C)yyyy" stamp
const SIGNATURE = "fescar photography";

// Image DPI setting (es. 72 for web output)
const IMAGE_DPI = 72;

// Border frame thickness in percentage (es. 1/100 = 1%)
const FRAME_THICKNESS = 1/100;

// Font size for the stamp
// Es. 45/35 (for 3008x2000 D70 full), 14/11 (for max 800 Fit Image)
const TEXT_COPYRIGHT_SIZE = 14;
const TEXT_INFO_SIZE = 11;

// Copyright text font and style
// First line of the stamp
const TEXT_COPYRIGHT_FONT = "Tahoma";
const TEXT_COPYRIGHT_BOLD = true;
const TEXT_COPYRIGHT_ITALIC = false;

// EXIF info text font and style
// Last 3 lines of the stamp
const TEXT_INFO_FONT = "Arial";

// Color settings
// SolidColor needs to be declared first
// So if you want a new color modify the RGB values,
// independently like "yellow" or linked like "black" (see below)
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 grey25 = new SolidColor();
	grey25.rgb.red = grey25.rgb.green = grey25.rgb.blue = 25;
var grey50 = new SolidColor();
	grey50.rgb.red = grey50.rgb.green = grey50.rgb.blue = 50;
var grey125 = new SolidColor();
	grey125.rgb.red = grey125.rgb.green = grey125.rgb.blue = 125;
var yellow = new SolidColor();
	yellow.rgb.red = 255, yellow.rgb.green = 255, yellow.rgb.blue = 0;

// Border frame color
const FRAME_COLOR = grey25;

// Copyright text color
const TEXT_COPYRIGHT_COLOR = yellow;

// EXIF info text color
const TEXT_INFO_COLOR = white;


// ********************
// *** Script BEGIN ***
// ********************


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;
}


function Trim(TRIM_VALUE) {
	if(TRIM_VALUE.length < 1) {
		return ""; 
	}
	TRIM_VALUE = RTrim(TRIM_VALUE);
	TRIM_VALUE = LTrim(TRIM_VALUE);
	if(TRIM_VALUE == "") {
		return "";
	} else {
		return TRIM_VALUE;
	}
}


function RTrim(VALUE) {
	var w_space = String.fromCharCode(32);
	var v_length = VALUE.length;
	var strTemp = "";
	if(v_length < 0){
		return "";
	}
	
	var iTemp = v_length -1;
	while(iTemp > -1) {
		if(VALUE.charAt(iTemp) == w_space) {
		} else {
			strTemp = VALUE.substring(0,iTemp +1);
			break;
		}
		iTemp = iTemp-1;
	}
	return strTemp;
}


function LTrim(VALUE) {
	var w_space = String.fromCharCode(32);
	var v_length = VALUE.length;
	var strTemp = "";
	if(v_length < 1) {
		return "";
	}
	
	var iTemp = 0;
	while(iTemp < v_length) {
		if(VALUE.charAt(iTemp) == w_space) {
		} else {
			strTemp = VALUE.substring(iTemp,v_length);
			break;
		}
		iTemp = iTemp + 1;
	}
	return strTemp;
}


function parseCaption(item) {
	var tempString = new String(item);
	// get rid of initial string [#Beginning of Shooting Data Section]
	if(tempString.indexOf("]")>0) {
		tempString=tempString.substr(tempString.indexOf("]")+1,tempString.length-tempString.indexOf("]")+1);
	}
	// get rid of final string [#End of Shooting Data Section]
	if(tempString.indexOf("[")>0) {
		tempString=tempString.substr(0,tempString.indexOf("["));
	}
	return tempString;
}


function splitCaption(item) {
	tempArray1 = new Array(1);
	var Count = 0;
	var tempArray2 = item.split("\x0A");
	// exclude empty elements from array
	for(n = 0; n < tempArray2.length; n = n + 1 ) {
		if (tempArray2[n].length>0) {
			tempArray1[Count]=tempArray2[n];
			Count = Count + 1;
		}
	}
	return tempArray1;
}


function getArrayValue(inputArray,searchString) {
	for(n = 0; n < inputArray.length; n = n + 1 ) {
		if (inputArray[n].indexOf(":")>0) {
			tempArray =inputArray[n].split(":");
			if (tempArray[0]==searchString) {
				return Trim(tempArray[1]);
			}
		}
	}
	return "";
}


function isZoom(item, search) {
	var tArray = item.split(" ");
	for(n = 0; n < tArray.length; n = n + 1) {
		searchPos = tArray[n].indexOf(search);
		if (searchPos > -1) {
			if(isNaN(tArray[n].substring(0, searchPos-1)) || isNaN(tArray[n].substring(searchPos+1, 999))) {
				return 1;
			}
		}
	}
	return 0;
}


displayDialogs = DialogModes.NO;

var defaultRulerUnits = preferences.rulerUnits;
preferences.rulerUnits = Units.PIXELS;

var AD = activeDocument;

var resRatio = AD.resolution/IMAGE_DPI;
if(resRatio != 1){
	AD.resizeImage(AD.width.value,AD.height.value,IMAGE_DPI);
}

backgroundColor = FRAME_COLOR;

var heightOriginal = AD.height.value;
var widthOriginal = AD.width.value;

var frameVar = heightOriginal;
if(widthOriginal > heightOriginal) {
	frameVar = widthOriginal;
}
bottomThickness = TEXT_COPYRIGHT_SIZE+(TEXT_INFO_SIZE*3)+(2/100*frameVar);

AD.resizeCanvas(AD.width.value+(FRAME_THICKNESS*frameVar), AD.height.value+(FRAME_THICKNESS*frameVar), AnchorPosition.MIDDLECENTER);
var heightVar = heightOriginal+(FRAME_THICKNESS*frameVar*0.80);
AD.resizeCanvas(AD.width.value, AD.height.value+bottomThickness, AnchorPosition.TOPCENTER);


var cameraModel = "";
var focalLength = "";
var sensitivity = "";
var dateTaken = "";
var yearTaken = "";
var meteringMode = "";
var optimizeImage = "";
var colorMode = "";
var noiseReduction = "";
var exposureTime = "";
var exposureAperture = "";
var exposureMode = "";
var whiteBalance = "";
var toneComp = "";
var pictureQuality1 = "";
var pictureQuality2 = "";
var afMode = "";
var hueAdjustment = "";
var imageSize = "";
var flash = "";
var flashSyncMode = "";
var flashAutoMode = "";
var flashAutoComp = "";
var flashHead = "";
var saturation = "";
var exposureComp = "";
var sharpening = "";
var lens = "";
var imageComment = "";
var isJPEG = false;


// parse standard EXIF data
var exifData = AD.info.exif.toString();
exifArray = explodeArray(exifData,",");

for(n = 0; n < exifArray.length; n = n + 2 ) {
	if(exifArray[n] == "Model") {
		cameraModel = exifArray[n+1];
	}
	if(exifArray[n] == "Focal Length") {
		focalLength = parseInt(exifArray[n+1]);
	}
	if(exifArray[n].indexOf("Exposure Time") != -1) {
		exposureTime = exifArray[n+1];
	}
	if(exifArray[n].indexOf("F-Stop") != -1) {
		exposureAperture = exifArray[n+1];
	}
	if(exifArray[n].indexOf("ISO Speed Ratings") != -1) {
		sensitivity = exifArray[n+1];
	}
	if(exifArray[n].indexOf("Exposure Bias Value") != -1) {
		exposureComp = exifArray[n+1];
	}
	if(exifArray[n].indexOf("Date Time Original") != -1) {
		dateTaken = exifArray[n+1];
		var dateArray1 = dateTaken.split(" ", 1);
		dateTaken = dateArray1[0];
		var dateArray2 = dateTaken.split(":");
		var monthsArray =["January",
				"February",
				"March",
				"April",
				"May",
				"June",
				"July",
				"August",
				"September",
				"October",
				"November",
				"December"];
		dateTaken = dateArray2[2]+" "+monthsArray[dateArray2[1]-1]+" "+dateArray2[0];
		yearTaken = dateArray2[0];
	}
	if(exifArray[n].indexOf("Exposure Program") != -1) {
		exposureMode = exifArray[n+1];
	}
	if(exifArray[n].indexOf("Metering Mode") != -1) {
		meteringMode = exifArray[n+1];
	}
	if(exifArray[n].indexOf("Flash") != -1) {
		flash = parseInt(exifArray[n+1],10);
	}
	if(exifArray[n].indexOf("Color Space") != -1) {
		colorMode = exifArray[n+1];
	}
}


// parse EXIF caption data
var captionData = Trim(AD.info.caption);

if(captionData != "") {
	var captionArray = splitCaption(parseCaption(captionData));
	
	cameraModel = captionArray[0];
	focalLength = getArrayValue(captionArray,"Focal Length");
	optimizeImage = getArrayValue(captionArray,"Optimize Image");
	//colorMode = getArrayValue(captionArray,"Color Mode");
	noiseReduction = getArrayValue(captionArray,"Noise Reduction");
	exposureMode = getArrayValue(captionArray,"Exposure Mode");
	whiteBalance = getArrayValue(captionArray,"White Balance");
	toneComp = getArrayValue(captionArray,"Tone Comp");
	pictureQuality1 = captionArray[9];
	pictureQuality2 = captionArray[10];
	afMode = getArrayValue(captionArray,"AF Mode");
	hueAdjustment = getArrayValue(captionArray,"Hue Adjustment");
	imageSize = getArrayValue(captionArray,"Image Size");
	flashSyncMode = getArrayValue(captionArray,"Flash Sync Mode");
	flashAutoMode = getArrayValue(captionArray,"Auto Flash Mode");
	flashAutoComp = getArrayValue(captionArray,"Auto Flash Comp");
	saturation = getArrayValue(captionArray,"Saturation");
	exposureComp = getArrayValue(captionArray,"Exposure Comp.");
	sharpening = getArrayValue(captionArray,"Sharpening");
	lens = getArrayValue(captionArray,"Lens");
	sensitivity = getArrayValue(captionArray,"Sensitivity");
	imageComment = getArrayValue(captionArray,"Image Comment");
}


// custom EXIF layout over standard
if(meteringMode == "Pattern") {
	meteringMode = "Matrix";
}
if(meteringMode == "Center Weighted Average") {
	meteringMode = "CWA";
}
if(afMode == "Manual") {
	afMode = "MF";
}
var pqArray1 = pictureQuality1.split(" ");
var pqArray2 = pictureQuality2.split(" ");
if(pqArray1[0] == "RAW" || pqArray1[0] == "JPEG") {
	pictureQuality = pqArray1[0] + " " + pqArray1[1];
} else if(pqArray2[0] == "RAW" || pqArray2[0] == "JPEG") {
	pictureQuality = pqArray2[0] + " " + pqArray2[1];
	flashHead = pictureQuality1;
} else {
	pictureQuality = "";
}
if(pqArray1[0] == "JPEG" || pqArray2[0] == "JPEG") {
	isJPEG = true;
}


var newLens = prompt("Lens found:  " + lens + "\n\nCorrect it if you want:", lens);
if(newLens != null) {
	lens = newLens;
}


var copyrightText = "\u00A9" + yearTaken + " " + SIGNATURE;

var infoText = "";

if(cameraModel != "") {
	infoText = infoText + cameraModel;
}
if(lens != "") {
	if(cameraModel != "") {
		infoText = infoText + " with " + lens;
	} else {
		infoText = infoText + lens;
	}
}
if(focalLength != "" && isZoom(lens, "-")) {
	infoText = infoText + " @" + focalLength;
} else {
	if(lens == "") {
		infoText = infoText + ", " + focalLength + "mm focals";
	}
}
infoText = infoText + "\u000D";
if(exposureMode != "" && exposureMode != "Not defined") {
	infoText = infoText + exposureMode + " ";
}
if(exposureTime != "") {
	infoText = infoText + exposureTime + " ";
}
if(exposureAperture != "") {
	infoText = infoText + exposureAperture + " ";
}
if(exposureComp != "0 EV" && exposureComp != "0.00" && exposureComp != "") {
	infoText = infoText + exposureComp + " ";
}
if(meteringMode != "") {
	infoText = infoText + "using " + meteringMode +" metering";
}
if(sensitivity != "") {
	infoText = infoText + ", " + sensitivity;
}
infoText = infoText + " \u000D";
if(dateTaken != "") {
	infoText = infoText + dateTaken;
}
if(pictureQuality != "") {
	infoText = infoText + ", " + pictureQuality;
}
if(isJPEG) {
	if(colorMode != "") {
		infoText = infoText + ", " + colorMode;
	}
	if(sharpening != "") {
		infoText = infoText + ", " + sharpening + " sharpening";
	}
	if(saturation != "") {
		infoText = infoText + ", " + saturation + " saturation";
	}
	if(hueAdjustment != "") {
		infoText = infoText + ", Hue " + hueAdjustment;
	}
	if(toneComp != "") {
		infoText = infoText + ", " + toneComp;
	}
}
if(whiteBalance != "") {
	infoText = infoText + ", WB " + whiteBalance;
}
if(afMode != "") {
	infoText = infoText + ", " + afMode + " mode";
}
if(flash > 0) {
	if(flashAutoMode != "") {
		infoText = infoText + ", " + flashAutoMode;
		done = 1;
	}
	if(flashAutoComp != "0 EV" && flashAutoComp != "") {
		infoText = infoText + " " + flashAutoComp;
		done = 1;
	}
	if(flashHead != "") {
		infoText = infoText + " " + flashHead;
		done = 1;
	}
}


var nameLayer = AD.artLayers.add();
nameLayer.kind = LayerKind.TEXT;
var TI = nameLayer.textItem;
	TI.position = [(FRAME_THICKNESS*widthOriginal)/2,heightVar+TEXT_COPYRIGHT_SIZE+2];
	TI.contents = copyrightText;
	TI.font = TEXT_COPYRIGHT_FONT;
	TI.size = TEXT_COPYRIGHT_SIZE;
	TI.color = TEXT_COPYRIGHT_COLOR;
	TI.fauxBold = TEXT_COPYRIGHT_BOLD;
	TI.fauxItalic = TEXT_COPYRIGHT_ITALIC;

var infoLayer = AD.artLayers.add();
infoLayer.kind = LayerKind.TEXT;
var TI = infoLayer.textItem;
	TI.position = [(FRAME_THICKNESS*widthOriginal)/2,heightVar+(3*TEXT_INFO_SIZE)];
	TI.contents = infoText;
	TI.font = TEXT_INFO_FONT;
	TI.size = TEXT_INFO_SIZE;
	TI.color = TEXT_INFO_COLOR;

AD.flatten();


// ******************
// *** Script END ***
// ******************

 

https://prepression.blogspot.com/2017/11/downloading-and-installing-adobe-scripts.html

 

Votes

Translate

Translate

Report

Report