PhotoShop給圖片自動(dòng)添加邊框及EXIF信息的JS腳本

作為一名“攝影愛好者”(好吧我承認(rèn)我不太合格,我才玩攝影沒幾天-_-!!)總有一件事情避免不了,就是讓照片帶上EXIF的參數(shù),雖然本人的部落格已經(jīng)安裝了插件可以顯示出EXIF信息,但是感覺插件還是不太給力,此外還要考慮到一些綜合的操作,比如批量的調(diào)整大小,增加版權(quán)信息等等。
當(dāng)然,好在我們還要PS,我們還可以寫PS的腳本讓他來按照我們的想法來進(jìn)行某些操作:)嘿嘿,從無忌論壇的一個(gè)帖子找到了一個(gè)PS腳本,按照自己的想法略加了一些修改(主要是時(shí)間,鏡頭識(shí)別,以及焦距識(shí)別)效果圖見題圖。有了腳本就方便許多了,比如你想要批量的增加EXIF邊框,那么很簡(jiǎn)單,錄制個(gè)動(dòng)作,然后批處理運(yùn)行這個(gè)動(dòng)作就好啦:)
最后,附上這個(gè)腳本:
displayDialogs = DialogModes.NO;
var defaultRulerUnits = preferences.rulerUnits;
preferences.rulerUnits = Units.PIXELS;
//將一個(gè)長字串分解成單個(gè)字符串
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=""; //臨時(shí)字串
var make=""; //相機(jī)公司
var model=""; //相機(jī)型號(hào)
var camera=""; //相機(jī)
var lens=""; //鏡頭類型
var lensUsed=""; //使用的鏡頭
var focalLength=""; //焦距
var exposureTime=""; //快門
var fNumber=""; //光圈
var ISOSpeedRatings=""; //ISO設(shè)置
var dateTimeOriginal=""; //拍攝時(shí)間
var exposureBiasValue=""; //曝光補(bǔ)償
var exposureProgram=""; //曝光程序模式
var fired=""; //閃光模式
//改成你自己想寫的,比如版權(quán)所有和你自己的網(wǎng)名等
//如果為空,將采用相機(jī)設(shè)置的名字
var creator="Photo By Kaisir"; //拍攝者
AD = activeDocument;
//Aglin 編制了自動(dòng)改變圖象大小為網(wǎng)上交流大小的代碼,
//稍加修改,如果寬窄任一邊大于1000,就自動(dòng)剪裁
//這里最長邊為750,最短邊為500
//請(qǐng)根據(jù)自己相機(jī)拍出來的圖像比例設(shè)置長寬比
//如果不用可以去掉
//--------------------------------------------
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信息分成單個(gè)的相關(guān)信息
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;
}
}
//曝光補(bǔ)償
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;
}
}
//拍攝日期、時(shí)間
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設(shè)置
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;
}
}
//相機(jī)廠商
for(n = 0; n < tempArray.length; n ++) {
stringTemp=tempArray[n];
if(stringTemp.indexOf("Make")!=-1){
make = tempArray[n+1];
break;
}
}
//相機(jī)型號(hào)
for(n = 0; n < tempArray.length; n ++) {
stringTemp=tempArray[n];
if(stringTemp.indexOf("Model")!=-1){
var model = tempArray[n+1];
break;
}
}
//對(duì)于有的相機(jī)型號(hào)不包括制造商部分
//camera = make+model;
//對(duì)于有的相機(jī)型號(hào)包括制造商部分
camera = model;
//相機(jī)所有者
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;
}
//計(jì)算光圈大小
dateArray1 = fNumber.split("/");
i = dateArray1[0];
j = dateArray1[1];
if(j>1)
fNumber=i/j;
else
fNumber=i;
//曝光補(bǔ)償換算成小數(shù)
dateArray1 = exposureBiasValue.split("/");
i = dateArray1[0];
j = dateArray1[1];
exposureBiasValue=i/j;
//小數(shù)點(diǎn)后面保留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);
//改變?nèi)掌诟袷?
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];
//你有什么鏡頭,就根據(jù)鏡頭和最大焦距改吧
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;
//白線寬窄設(shè)為2或4,兩邊,實(shí)際寬度除以2
AD.resizeCanvas(AD.width.value+2,AD.height.value+2,AnchorPosition.MIDDLECENTER);
//加入灰框
//backgroundColor = grey;
//加入黑框
backgroundColor = black;
//如果改為白框
//backgroundColor = white;
//邊框?qū)挾群透叨?這里將黑框?qū)捳O(shè)為圖片寬度的1/40,兩邊,實(shí)際寬度再除以2
fWidth = parseInt(photoWidth/40);
fHight = parseInt(photoWidth/40);
//加框
AD.resizeCanvas(AD.width.value+fWidth,AD.height.value+fHight, AnchorPosition.MIDDLECENTER);
//底部再加寬點(diǎn),便于寫字
AD.resizeCanvas(AD.width.value,AD.height.value+fHight+fHight+fHight,AnchorPosition.TOPCENTER);
//標(biāo)字和參數(shù)
nameLayer = AD.artLayers.add();
nameLayer.kind = LayerKind.TEXT;
TN = nameLayer.textItem;
TN.contents = creator;
//版權(quán)字體、字號(hào)、顏色和加粗等
TN.font = "STXingkai";
//右對(duì)齊
TN.justification = Justification.RIGHT;
//字號(hào)
tSize = parseInt((fWidth+10)/2);
//字體左邊距和下邊距
tLeft = photoWidth;
tHight = photoHight-fHight+tSize;
//標(biāo)字的位置
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;
//右對(duì)齊,如果左對(duì)齊可以省略下面這行
TI.justification = Justification.RIGHT;
tHight = photoHight+fHight+tSize;
//標(biāo)字的位置
TI.position = [tLeft,tHight];
//顯示:相機(jī)型號(hào),鏡頭,焦距,曝光時(shí)間,光圈,ISO設(shè)置,拍攝日期等
TI.contents = camera+", "+lensUsed+" @"+focalLength+"mm,"+exposureTime+"Sec,F/";
TI.contents = TI.contents+fNumber+", EV "+exposureBiasValue+ISOSpeedRatings;
//如果對(duì)曝光程式不感興趣,請(qǐng)去掉下面行
TI.contents = TI.contents+", "+exposureProgram+", "+fired;
TI.contents = TI.contents+"\u000D"+phoDate+" "+phoTime;
//字體、字號(hào)、顏色等
TI.font = "黑體";
//TI.font = "Arial";
TI.size = tSize;
TI.color = white;
//如果為白框,字體為黑色
//TI.color = black;
TI.fauxBold = true;
AD.flatten();
//-------------
相關(guān)文章
微信小程序?qū)崿F(xiàn)多個(gè)按鈕的顏色狀態(tài)轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)多個(gè)按鈕的顏色狀態(tài)轉(zhuǎn)換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02
js+html+css實(shí)現(xiàn)簡(jiǎn)單電子時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了js+html+css實(shí)現(xiàn)簡(jiǎn)單電子時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
在bootstrap中實(shí)現(xiàn)輪播圖實(shí)例代碼
Bootstrap中輪播圖插件叫作Carousel ,下面通過本文給大家詳細(xì)介紹了bootstrop中實(shí)現(xiàn)輪播圖效果,需要的朋友參考下2017-06-06

