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(); 

//-------------
(0)

相关推荐

  • JS设置网页图片vspace和hspace属性的方法

    本文实例讲述了JS设置网页图片vspace和hspace属性的方法.分享给大家供大家参考.具体分析如下: hspace可以以像素为单位,指定图像左边和右边的文字与图像之间的间距:vspace 值则是上面的下面的文字与图像之间的距离的像素数 <!DOCTYPE html> <html> <head> <script> function setSpace() { document.getElementById("compman").hspac

  • JS动态修改图片的URL(src)的方法

    本文实例讲述了JS动态修改图片的URL(src)的方法.分享给大家供大家参考.具体如下: 下面的JS代码可以动态修改图片地址,以显示一张新的图片,实际上是通过修改图片的src属性来实现的 <!DOCTYPE html> <html> <head> <script> function changeSrc() { document.getElementById("myImage").src="hackanm.gif"; }

  • JS获取图片lowsrc属性的方法

    本文实例讲述了JS获取图片lowsrc属性的方法.分享给大家供大家参考.具体如下: lowsrc属性一般设置为图片的低分辨率图片地址,下面的代码可以通过点击链接显示图片的低分辨率版本 <!DOCTYPE html> <html> <body> <img id="compman" src="compman.gif" lowsrc="compman_lowres.gif" alt="Computer

  • js动态往表格的td中添加图片并注册事件

    这回的小case如题,额外还有一个,当点击图片时响应事件.代码如下: 复制代码 代码如下: <script type="text/javascript"> function onloadEvent(){ var _td = document.getElementById("a1"); var _img = document.createElement("img"); _img.setAttribute("id",

  • JS获取网页图片name属性的方法

    本文实例讲述了JS获取网页图片name属性的方法.分享给大家供大家参考.具体如下: 下面的JS代码可以用来获取网页图片的name属性 <!DOCTYPE html> <html> <body> <img id="compman" name="compman" src="compman.gif" alt="Computerman" width="107" height

  • JS实现动态给图片添加边框的方法

    本文实例讲述了JS实现动态给图片添加边框的方法.分享给大家供大家参考.具体如下: 下面的JS代码设置图片的边框为2个像素,即border=2 <!DOCTYPE html> <html> <head> <script> function addBorder() { document.getElementById("compman").border="2"; } </script> </head>

  • js实现鼠标悬浮给图片加边框的方法

    本文实例讲述了js实现鼠标悬浮给图片加边框的方法.分享给大家供大家参考.具体实现方法如下: html代码: <div class="T-s-l fl"> <a href="" class="a1"> <img src="images/11.jpg" width="234" height="368" /> </a><a href=&qu

  • PhotoShop给图片自动添加边框及EXIF信息的JS脚本

    作为一名"摄影爱好者"(好吧我承认我不太合格,我才玩摄影没几天-_-!!)总有一件事情避免不了,就是让照片带上EXIF的参数,虽然本人的部落格已经安装了插件可以显示出EXIF信息,但是感觉插件还是不太给力,此外还要考虑到一些综合的操作,比如批量的调整大小,增加版权信息等等. 当然,好在我们还要PS,我们还可以写PS的脚本让他来按照我们的想法来进行某些操作:)嘿嘿,从无忌论坛的一个帖子找到了一个PS脚本,按照自己的想法略加了一些修改(主要是时间,镜头识别,以及焦距识别)效果图见题图.有了

  • Java实现获取图片和视频文件的Exif信息

    目录 前言 一.相关知识简介 1.Metadata 元数据 2.Exif 可交换图像文件信息 3.metadata-extractor 库 二.使用步骤 1.创建Maven项目 2.Metadata信息获取 3.根据不同的Directory精确Tag提取 4.经纬度提取 5.视频元数据提取 三.对Exif的中文解释 四.总结 前言 随着现在实景地图的如火如荼建设,无人机等航拍测绘手段的不断升级,我们在获取全景照片或者正射影像,全景视频等数据上更加快速.便捷.由于无人机本身不进行相关数据的处理,比

  • Pycharm创建python文件自动添加日期作者等信息(步骤详解)

    第一步 找到 Preferences,点击进入.进入后找到 Editor – File and Code Templates – Python Script . 第二步 添加自己所需要的信息 第三步 添加完成后,点击 OK 键进行保存. 新建python文件就会看到已添加的默认信息. 常用配置 #-- coding: utf-8 -- #@Time : ${DATE} ${TIME} #@Author : XXXX #@Email : XXXX@qq.com #@File : ${NAME}.p

  • OpenCV实现给图片添加边框功能

    目标: 基于OpenCV的函数cv::copyMakeBorder给图像添加边框 函数简介: copyMakeBorder( src, dst, top, bottom, left, right, borderType, value ); 参数: src: 原图像 dst: 目标图像 top, bottom, left, right: 每一个边界方向上像素的宽度.在这里使用图像原始大小的 5% . borderType:边框的类型 .当前例子中位纯色或者边界的复制. value: 如果borde

  • chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式

    一.发现该问题的原因-是在写账号登录页面时,input表单添加了背景图片,当自动填充,搓搓的一坨淡黄色背景出来. 这个原因是我草率的直接设置在input元素里面,结果问题就来了.所以如果把这个图标放在input表单外面,就不会出现这个问题. 二.表单自动填充会添加浏览器默认样式怎么处理和避免 第二张图,就是表单自动填充后,chrome会默认给自动填充的input表单加上input:-webkit-autofill私有属性 input:-webkit-autofill, textarea:-web

  • iOS应用开发中UIView添加边框颜色及设置圆角边框的方法

    UIView加边框及边框颜色 引用库: 复制代码 代码如下: #import <QuartzCore/QuartzCore.h> 使用: 复制代码 代码如下: //添加边框和提示         CGRect frameRect = CGRectMake(20, 90, self.window.frame.size.width-40, self.window.frame.size.height-180);         UIView   *frameView = [[UIView alloc

  • JavaScript实现图片自动加载的瀑布流效果

    先给大家展示下效果图: 向下滑动网页的时候能够自动加载图片并显示. 盛放图片的盒子模型如下: <div class="box"> <div class="box_img"> <img src="Img/8.jpg"> </div> </div> 设置img-width为150px,然后box_img添加内边距和阴影效果,box的外边距为0,添加内边距.盒子的宽度是由img-width和边

  • 详解前端自动化工具gulp自动添加版本号

    之前,我介绍了学习安装并配置前端自动化工具Gulp,觉得gulp确实比grunt的配置简单很多,于是我决定再深入学习一下gulp,就去网上查了资料,发现gulp还可以自动添加版本号,这个功能就为我平时在更新css或js时老是在客户端存在缓存导致更新后的效果无法实时展现的苦恼.所以就赶紧去试了一下,果真可以,很高兴啊,真是为项目开发,为效果的快速展现提供了很多的便利. 实现原理: 1.修改js和css文件: 2.通过对js,css文件内容进行hash运算,生成一个文件的唯一hash字符串(如果文件

  • 图片自动保存到本地并利用aspjpeg为图片加水印

    <% '函数功能:远程图片自动保存到本地服务器,并利用aspjpeg为图片加上水印 '(注意:请先在目录下创建images目录,用来保存临时图片) '本程序需要在服务器上安装"aspjpeg组件"否则无法正常使用 '也可以只取'''''22222222'''''''以上的部分,这部分可以保存图片,第二部分是进行水印增加 '使用方法,请保存为saveimg.asp 'saveimg.asp?url=http://siyizhu.com/logo.gif 即可以取下图片啦,HOHO.

随机推荐