As a "photographic enthusiast" (Okay, I admit that I'm not qualified, I've only been playing photography for a few days -_-!!) There is always one thing that cannot be avoided, which is to let the photos bring the EXIF parameters. Although my blog has installed plug-ins to display EXIF information, I feel that the plug-ins are still not very powerful. In addition, some comprehensive operations must be considered, such as batch size adjustments, copyright information, etc.
Of course, fortunately, we still need PS, and we can also write PS scripts to let him perform certain operations according to our ideas:) Hehe, I found a PS script from a post on Wuji forum, and added some modifications according to my own ideas (mainly time, lens recognition, and focal length recognition). The renderings are shown in the question picture. With scripts, it is much more convenient. For example, if you want to add EXIF borders in batches, it is very simple. Just record an action and then batch run this action :)
Finally, attach this script:
displayDialogs = DialogModes.NO; var defaultRulerUnits = preferences.rulerUnits; preferences.rulerUnits = Units.PIXELS; //Decompose a long string into a single string function exploitArray(item) { var i=0;var Count=0; var tempString=new String(item); tempArray=new Array(1); do{ i=tempString.indexOf(":");if(i>0)tempString=tempString.substr(i+1,tempString.length-i-1);i=tempString.indexOf(">");if(i>0){tempArray[Count]=tempString.substr(0,i); tempString=tempString.substr(i+1,tempString.length-i-1);Count ++;}i=tempString.indexOf("<");if(i>0) {tempArray[Count]=tempString.substr(0,i); tempString=tempString.substr(i-1,tempString.length-i+1);Count ++;}}while (tempString.indexOf("</x:xmpmeta>")>0);tempArray[Count]=tempString; return tempArray; } var i=0;var j=0;var k=0;var pResulotion=72;var AD="";var resRatio="";var imageRatio="";var dateArray1="";var dateArray2="";var monthsArray="";var exposureProgramArray="";var phoDate="";var phoTime="";var photoWidth="";var photoHight="";var exifData="";var black=""; var white=""; var grey="";var fWidth="";var fHight="";var tSize="";var tLeft="";var tHight="";var infoLayer="";var TI="";nameLayer=""; var TN=""; var stringTemp="";//temporary string var make="";//camera company var model="";//camera model var camera="";//camera var lens="";//look type var lensUsed="";//The lens used var focalLength=""; //Focus length var exposureTime=""; //Shutter var fNumber="";//Aperture var ISOSpeedRatings="";//ISO setting var dateTimeOriginal="";//Shooting time var exposureBiasValue="";//Exposure compensation var exposureProgram="";//Exposure program mode var fired=""; //Flash mode//Change to what you want to write, such as copyright and your own web name, etc.//If empty, the name set by the camera will be used var creator="Photo By Kaisir";//Photographer AD = activeDocument; //Aglin has compiled a code to automatically change the image size to the online communication size. //A little modification, if either side is wide and narrower than 1000, it will be automatically cut //The longest side here is 750, and the shortest side is 500//Please set the aspect ratio according to the proportion of the image taken by your camera //If you don't use it, you can remove it //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- AD.width.value/AD.height.value;if(imageRatio>1)AD.resizeImage(resizeMax,resizeMin,pResulotion,ResampleMethod.BICUBICSHARPER); if(imageRatio==1)AD.resizeImage(resizeMax,resizeMax,pResulotion,ResampleMethod.BICUBICSHARPER); if(imageRatio<1)AD.resizeImage(resizeMin,resizeMax,pResulotion,ResampleMethod.BICUBICSHARPER); if(imageRatio<1)AD.resizeImage(resizeMin,resizeMax,pResulotion,ResampleMethod.BICUBICSHARPER); }//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- CS obtains EXIF information //Shutter speed for(n = 0; n < tempArray.length; n ++) { stringTemp=tempArray[n];if(stringTemp.indexOf("ExposureTime")!=-1){ exposureTime = tempArray[n+1]; break;} }//Aperture size for(n = 0; n < tempArray.length; n ++) { stringTemp=tempArray[n];if(stringTemp.indexOf("FNumber")!=-1){ fNumber = tempArray[n+1];break;} }//Exposure program mode for(n = 0; n < tempArray.length; n ++) { stringTemp=tempArray[n];if(stringTemp.indexOf("ExposureProgram")!=-1){ exposureProgram = tempArray[n+1]; break;} }//Exposure compensation for(n = 0; n < tempArray.length; n ++) { stringTemp=tempArray[n];if(stringTemp.indexOf("ExposureBiasValue")!=-1){ exposureBiasValue = tempArray[n+1]; break;} }//Flash mode for(n = 0; n < tempArray.length; n ++) { stringTemp=tempArray[n];if(stringTemp.indexOf("Fired")!=-1){ fired = tempArray[n+1]; break;} }//Shot date and time for(n = 0; n < tempArray.length; n ++) { stringTemp=tempArray[n];if(stringTemp.indexOf("DateTimeOriginal")!=-1){ dateTimeOriginal = tempArray[n+1]; break;} }//Use focal length for(n = 0; n < tempArray.length; n ++) { stringTemp=tempArray[n];if(tempArray[n]=="FocalLength"){ focalLength = tempArray[n+1];break;} }//ISO setting for(n = 0; n < tempArray.length; n ++) { stringTemp=tempArray[n];if(stringTemp.indexOf("ISOSpeedRatings")!=-1){ ISOSpeedRatings = ", ISO "+tempArray[n+5]; break;} }//Use lens type for(n = 0; n < tempArray.length; n ++) { stringTemp=tempArray[n];if(tempArray[n]=="Lens"){ lens=tempArray[n+1]; break;} }//Camera manufacturer for(n = 0; n < tempArray.length; n ++) { stringTemp=tempArray[n];if(stringTemp.indexOf("Make")!=-1){ make = tempArray[n+1]; break;} }//Camera model for(n = 0; n < tempArray.length; n ++) { stringTemp=tempArray[n];if(stringTemp.indexOf("Model")!=-1){ var model = tempArray[n+1]; break;} }//For some camera models, do not include the manufacturer's part//camera = make+model; //For some camera models, include the manufacturer's part camera = model; //Camera owner for(n = 0; n < tempArray.length; n ++) { stringTemp=tempArray[n];if(stringTemp.indexOf("creator")!=-1 && creator==""){ creator = tempArray[n+5]; break;} }//Check shutter speed dateArray1 = exposureTime.split("/");j = dateArray1[0];i = dateArray1[1];if(j/i>=1)exposureTime=parseInt(j/i)+"."+(j-parseInt(j/i)*i);else{i=parseInt(i/j);j=1;exposureTime=j+"/"+i;}//Calculate the aperture size dateArray1 = fNumber.split("/");i = dateArray1[0];j = dateArray1[1];if(j>1)fNumber=i/j;elsefNumber=i;//Convert exposure compensation to decimal dateArray1 = exposureBiasValue.split("/");i = dateArray1[0];j = dateArray1[1];exposureBiasValue=i/j;//Retain 2 digits after the decimal point, just *100/100, keep 1 digits, just *10/10//Retain 2 digits here, 20D can do not have these two lines if(exposureBiasValue!=0)exposureBiasValue=parseInt(exposureBiasValue*100)/100;if (exposureBiasValue > 0)exposureBiasValue="+"+exposureBiasValue;//Determine the exposure program mode exposureProgramArray = ["Undefined","Manual","Normal Program","Aperture Priority","Shutter Priority","Creative Program","Action Program","Portrait Mode","Landscape Mode"];exposureProgram = exposureProgramArray[exposureProgram];//Check flash mode dateArray1 = fired;if(dateArray1.indexOf("True")!=-1)fired="FlashOn";elsefired="FlashOff";//Check focal length dateArray1 = focalLength.split("/");i = dateArray1[0];j = dateArray1[1];focalLength=parseInt(i/j);//Change the date format dateArray1 = dateTimeOriginal.split("T"); phoDate = dateArray1[0];phoTime = dateArray1[1];dateArray2 = phoDate.split("-"); monthsArray =["1", "2", "3", "4", "5","6", "7", "8", "9", "10", "11", "12"]; phoDate = dateArray2[0]+"-"+monthsArray[dateArray2[1]-1]+"-"+dateArray2[2];dateArray2 = phoTime.split("+");phoTime = dateArray2[0];//If you have any lens, just change it according to the lens and maximum focal length if(lens != "") {if(lens.indexOf("17.0-40.0 mm")!=-1)lensUsed = "Canon 17-40mm F4L USM"; }//If there is no lens information, use the original method to compare else {var focLength=parseInt(focalLength);lensUsed="18-55mm 1:3.5-5.6G";//if(focLength>=17 && focLength<=40)//lensUsed = "Nikon"; //if(focLength>=70 && focLength<=200)//lensUsed = "Nikon";//if(focLength=="85")//lensUsed = "Nikon"; //if(focLength=="100")//lensUsed = "Nikon"; }//Draw lines and boxes//Define black, you can also define other colors black = new SolidColor(); black.rgb.red = black.rgb.green = black.rgb.blue = 0; //Define white, you can also define other colors white = new SolidColor(); white.rgb.red = white.rgb.green = white.rgb.blue = 255; //Define gray, you can also define other colors grey = new SolidColor(); grey.rgb.red = grey.rgb.green = grey.rgb.blue = 50; //Add a white line backgroundColor = white; //If changed to black line //backgroundColor = black; //The width and narrow of the white line are set to 2 or 4, on both sides, the actual width is divided by 2AD.resizeCanvas(AD.width.value+2,AD.height.value+2,AnchorPosition.MIDDLECENTER); //Add gray frame //backgroundColor = grey; //Add black frame backgroundColor = black; //If changed to white frame //backgroundColor = white; //Border width and height, here set the width and narrow of the black frame to 1/40 of the picture width, and on both sides, the actual width is divided by 2fWidth = parseInt(photoWidth/40);fHight = parseInt(photoWidth/40);//Add AD.resizeCanvas(AD.width.value+fWidth,AD.height.value+fHight, AnchorPosition.MIDDLECENTER); //Add a widening point at the bottom to facilitate writing AD.resizeCanvas(AD.width.value,AD.height.value+fHight+fHight,AnchorPosition.TOPCENTER); //Standard and parameters nameLayer = AD.artLayers.add(); nameLayer.kind = LayerKind.TEXT; TN = nameLayer.textItem; TN.contents = creator;//Copyright font, font size, color and bold, etc. TN.font = "STXingkai"; //Right aligned TN.justification = Justification.RIGHT;//Font size tSize = parseInt((fWidth+10)/2);//Font left margin and bottom margin tLeft = photoWidth;tHight = photoHight-fHight+tSize;//Position of the marker TN.position = [tLeft,tHight];TN.size = tSize+4; TN.color = white; //If it is a white frame, the font is black //TN.color = black; TN.fauxBold = true; infoLayer = AD.artLayers.add(); infoLayer.kind = LayerKind.TEXT; TI = infoLayer.textItem; //Right aligned, if it is left aligned, the following line can be omitted TI.justification = Justification.RIGHT;tHight = photoHight+fHight+tSize;//Position of the marker TI.position = [tLeft,tHight];//Display: camera model, lens, focal length, exposure time, aperture, ISO setting, shooting date, etc. TI.contents = camera+", "+lensUsed+" @"+focalLength+"mm,"+exposureTime+"Sec,F/";TI.contents = TI.contents+fNumber+", EV "+exposureBiasValue+ISOSpeedRatings;//If you are not interested in exposure programs, please remove the following line TI.contents = TI.contents+", "+exposureProgram+", "+fired;TI.contents = TI.contents+"/u000D"+phoDate+" "+phoTime;//Font, font size, color, etc. TI.font = "Bold"; //TI.font = "Arial"; TI.size = tSize; TI.color = white; //If it is a white box, the font is black//TI.color = black; TI.fauxBold = true;AD.flatten(); //-------------