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邊框,那么很簡單,錄制個(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 //請根據(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; } } //對于有的相機(jī)型號(hào)不包括制造商部分 //camera = make+model; //對于有的相機(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"; //右對齊 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; //右對齊,如果左對齊可以省略下面這行 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; //如果對曝光程式不感興趣,請去掉下面行 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-02js+html+css實(shí)現(xiàn)簡單電子時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了js+html+css實(shí)現(xiàn)簡單電子時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06在bootstrap中實(shí)現(xiàn)輪播圖實(shí)例代碼
Bootstrap中輪播圖插件叫作Carousel ,下面通過本文給大家詳細(xì)介紹了bootstrop中實(shí)現(xiàn)輪播圖效果,需要的朋友參考下2017-06-06