PhotoShop給圖片自動新增邊框及EXIF資訊的JS指令碼

PhotoShop給圖片自動新增邊框及EXIF資訊的JS指令碼

作為一名“攝影愛好者”(好吧我承認我不太合格,我才玩攝影沒幾天-_-!!)總有一件事情避免不了,就是讓照片帶上EXIF的引數,雖然本人的部落格已經安裝了外掛可以顯示出EXIF資訊,但是感覺外掛還是不太給力,此外還要考慮到一些綜合的操作,比如批量的調整大小,增加版權資訊等等。

當然,好在我們還要PS,我們還可以寫PS的指令碼讓他來按照我們的想法來進行某些操作:)嘿嘿,從無忌論壇的一個帖子找到了一個PS指令碼,按照自己的想法略加了一些修改(主要是時間,鏡頭識別,以及焦距識別)效果圖見題圖。有了指令碼就方便許多了,比如你想要批量的增加EXIF邊框,那麼很簡單,錄製個動作,然後批處理執行這個動作就好啦:)

最後,附上這個指令碼:


displayDialogs = DialogModes.NO; 
var defaultRulerUnits = preferences.rulerUnits; 
preferences.rulerUnits = Units.PIXELS; 
//將一個長字串分解成單個字串
function explodeArray(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="";		//臨時字串
var make="";			//相機公司
var model="";			//相機型號
var camera="";			//相機
var lens="";			//鏡頭型別
var lensUsed="";		//使用的鏡頭
var focalLength=""; 		//焦距
var exposureTime=""; 		//快門
var fNumber="";			//光圈
var ISOSpeedRatings="";		//ISO設定
var dateTimeOriginal="";	//拍攝時間
var exposureBiasValue="";	//曝光補償
var exposureProgram="";		//曝光程式模式
var fired=""; 			//閃光模式
//改成你自己想寫的,比如版權所有和你自己的網名等
//如果為空,將採用相機設定的名字
var creator="Photo By Kaisir";	//拍攝者
AD = activeDocument; 
//Aglin 編制了自動改變圖象大小為網上交流大小的程式碼,
//稍加修改,如果寬窄任一邊大於1000,就自動剪裁
//這裡最長邊為750,最短邊為500
//請根據自己相機拍出來的影象比例設定長寬比
//如果不用可以去掉
//--------------------------------------------
var resizeMax=1024;
var resizeMin=678;
if(AD.width.value > 1500 || AD.height.value > 1500) {
imageRatio = 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); 
}
//--------------------------------------------
resRatio = AD.resolution/pResulotion; 
if(resRatio!=1){ 
AD.resizeImage(AD.width.value,AD.height.value,pResulotion); 
} 
photoWidth = AD.width.value; 
photoHight = AD.height.value; 
//獲取RAW儲存的資訊
exifData = AD.xmpMetadata.rawData.toString();
//將EXIF資訊分成單個的相關資訊
explodeArray(exifData); 
//Photoshop CS獲取EXIF資訊
//快門速度
for(n = 0; n < tempArray.length; n   ) 
{ 
stringTemp=tempArray[n];
if(stringTemp.indexOf("ExposureTime")!=-1)
{ 
exposureTime = tempArray[n 1]; 
break;
} 
}
//光圈大小
for(n = 0; n < tempArray.length; n   ) { 
stringTemp=tempArray[n];
if(stringTemp.indexOf("FNumber")!=-1){ 
fNumber = tempArray[n 1];
break;
} 
}
//曝光程式模式
for(n = 0; n < tempArray.length; n   ) { 
stringTemp=tempArray[n];
if(stringTemp.indexOf("ExposureProgram")!=-1){ 
exposureProgram = tempArray[n 1]; 
break;
} 
}
//曝光補償
for(n = 0; n < tempArray.length; n   ) { 
stringTemp=tempArray[n];
if(stringTemp.indexOf("ExposureBiasValue")!=-1){ 
exposureBiasValue = tempArray[n 1]; 
break;
} 
}
//閃光模式
for(n = 0; n < tempArray.length; n   ) { 
stringTemp=tempArray[n];
if(stringTemp.indexOf("Fired")!=-1){ 
fired = tempArray[n 1]; 
break;
} 
}
//拍攝日期、時間
for(n = 0; n < tempArray.length; n   ) { 
stringTemp=tempArray[n];
if(stringTemp.indexOf("DateTimeOriginal")!=-1){ 
dateTimeOriginal = tempArray[n 1]; 
break;
} 
}
//使用焦距
for(n = 0; n < tempArray.length; n   ) { 
stringTemp=tempArray[n];
if(tempArray[n]=="FocalLength"){ 
focalLength = tempArray[n 1];
break;
} 
}
//ISO設定
for(n = 0; n < tempArray.length; n   ) { 
stringTemp=tempArray[n];
if(stringTemp.indexOf("ISOSpeedRatings")!=-1){ 
ISOSpeedRatings = ", ISO " tempArray[n 5]; 
break;
} 
}
//使用鏡頭型別
for(n = 0; n < tempArray.length; n   ) { 
stringTemp=tempArray[n];
if(tempArray[n]=="Lens"){ 
lens=tempArray[n 1]; 
break;
} 
}
//相機廠商
for(n = 0; n < tempArray.length; n   ) { 
stringTemp=tempArray[n];
if(stringTemp.indexOf("Make")!=-1){ 
make = tempArray[n 1]; 
break;
} 
}
//相機型號
for(n = 0; n < tempArray.length; n   ) { 
stringTemp=tempArray[n];
if(stringTemp.indexOf("Model")!=-1){ 
var model = tempArray[n 1]; 
break;
} 
}
//對於有的相機型號不包括製造商部分
//camera = make model; 
//對於有的相機型號包括製造商部分
camera = model; 
//相機所有者
for(n = 0; n < tempArray.length; n   ) { 
stringTemp=tempArray[n];
if(stringTemp.indexOf("creator")!=-1 && creator==""){ 
creator = tempArray[n 5]; 
break;
} 
}
//檢查快門速度
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;
}
//計算光圈大小
dateArray1 = fNumber.split("/");
i = dateArray1[0];
j = dateArray1[1];
if(j>1)
fNumber=i/j;
else
fNumber=i;
//曝光補償換算成小數
dateArray1 = exposureBiasValue.split("/");
i = dateArray1[0];
j = dateArray1[1];
exposureBiasValue=i/j;
//小數點後面保留2位,就*100/100,保留一位,就*10/10
//這裡保留了2位,20D可以不要這兩行
if(exposureBiasValue!=0)
exposureBiasValue=parseInt(exposureBiasValue*100)/100;
if (exposureBiasValue > 0)
exposureBiasValue=" " exposureBiasValue;
//確定曝光程式模式
exposureProgramArray = ["未定義",
"Manual",
"Normal Program",
"Aperture Priority",
"Shutter Priority",
"Creative Program",
"Action Program",
"Portrait Mode",
"Landscape Mode"];
exposureProgram = exposureProgramArray[exposureProgram];
//檢查閃光模式
dateArray1 = fired;
if(dateArray1.indexOf("True")!=-1)
fired="FlashOn";
else
fired="FlashOff";
//檢查焦距
dateArray1 = focalLength.split("/");
i = dateArray1[0];
j = dateArray1[1];
focalLength=parseInt(i/j);
//改變日期格式
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(lens != "") {
if(lens.indexOf("17.0-40.0 mm")!=-1)
lensUsed = "Canon 17-40mm F4L USM"; 
}
//如果沒有鏡頭資訊,就使用原來的辦法比較
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"; 
}
//畫線和框
//定義黑色,你也可以定義其他顏色喲
black = new SolidColor(); 
black.rgb.red = black.rgb.green = black.rgb.blue = 0; 
//定義白色,你也可以定義其他顏色喲
white = new SolidColor(); 
white.rgb.red = white.rgb.green = white.rgb.blue = 255; 
//定義灰色,你也可以定義其他顏色喲
grey = new SolidColor(); 
grey.rgb.red = grey.rgb.green = grey.rgb.blue = 50; 
//加入一條白線
backgroundColor = white; 
//如果改為黑線
//backgroundColor = black; 
//白線寬窄設為2或4,兩邊,實際寬度除以2
AD.resizeCanvas(AD.width.value 2,AD.height.value 2,AnchorPosition.MIDDLECENTER); 
//加入灰框
//backgroundColor = grey; 
//加入黑框
backgroundColor = black; 
//如果改為白框
//backgroundColor = white; 
//邊框寬度和高度,這裡將黑框寬窄設為圖片寬度的1/40,兩邊,實際寬度再除以2
fWidth = parseInt(photoWidth/40);
fHight = parseInt(photoWidth/40);
//加框
AD.resizeCanvas(AD.width.value fWidth,AD.height.value fHight, AnchorPosition.MIDDLECENTER); 
//底部再加寬點,便於寫字
AD.resizeCanvas(AD.width.value,AD.height.value fHight fHight fHight,AnchorPosition.TOPCENTER); 
//標字和引數 
nameLayer = AD.artLayers.add(); 
nameLayer.kind = LayerKind.TEXT; 
TN = nameLayer.textItem; 
TN.contents = creator;
//版權字型、字號、顏色和加粗等 
TN.font = "STXingkai"; 
//右對齊
TN.justification = Justification.RIGHT;
//字號
tSize = parseInt((fWidth 10)/2);
//字型左邊距和下邊距
tLeft = photoWidth;
tHight = photoHight-fHight tSize;
//標字的位置
TN.position = [tLeft,tHight];
TN.size = tSize 4; 
TN.color = white; 
//如果為白框,字型為黑色
//TN.color = black; 
TN.fauxBold = true; 
infoLayer = AD.artLayers.add(); 
infoLayer.kind = LayerKind.TEXT; 
TI = infoLayer.textItem; 
//右對齊,如果左對齊可以省略下面這行
TI.justification = Justification.RIGHT;
tHight = photoHight fHight tSize;
//標字的位置
TI.position = [tLeft,tHight];
//顯示:相機型號,鏡頭,焦距,曝光時間,光圈,ISO設定,拍攝日期等
TI.contents = camera ", " lensUsed " @" focalLength "mm," exposureTime "Sec,F/";
TI.contents = TI.contents fNumber ", EV " exposureBiasValue ISOSpeedRatings;
//如果對曝光程式不感興趣,請去掉下面行
TI.contents = TI.contents ", " exposureProgram ", " fired;
TI.contents = TI.contents "\u000D" phoDate " " phoTime;
//字型、字號、顏色等 
TI.font = "黑體"; 
//TI.font = "Arial"; 
TI.size = tSize; 
TI.color = white; 
//如果為白框,字型為黑色
//TI.color = black; 
TI.fauxBold = true;
AD.flatten(); 
//-------------

您可能感興趣的文章:

js實現滑鼠懸浮給圖片加邊框的方法js動態往表格的td中新增圖片並註冊事件JS設定網頁圖片vspace和hspace屬性的方法JS獲取圖片lowsrc屬性的方法JS獲取網頁圖片name屬性的方法JS動態修改圖片的URL(src)的方法JS實現動態給圖片新增邊框的方法