主题:数码相片Exif边框脚本俱乐部 [主题管理员:头头是道]
正序浏览
主题图片汇总
主题内检索
浏览:197403 回帖:1222
游客没有回帖权限
泡菜
泡网分: 0
主题: 3
帖子: 120
注册: 2005年2月
贴代码果然不好使,还是贴图吧

第一段
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0
主题: 3
帖子: 120
注册: 2005年2月
xjack: 不客气

这段镜头选择对话框其实还有很大的改进空间。其思路是,根据照片EXIF信息中的焦距数值(Focal Length),去排除焦距范围不符的镜头。如果排除之后只剩下一个镜头符合条件,那就不再弹出对话框,直接使用那个镜头。这对于批处理照片是很方便的。

如果你用的RAW文件,那么照片的xmpMetaData中可能还含有镜头的焦距范围信息,格式如:

<aux:Lens>70.0-200.0 mm</aux:Lens>

利用这个信息可以更有效的排除无关的镜头,基本可以做到直接命中(当然如果你手里同时有 XB, XB IS, XXB,程序还是无法区分,只好弹对话框了)

俺有一段新的代码采取上述思路,有兴趣的话可以试试:

首先,还是指定你的镜头列表:
[code]
var lensArray = new Array();
lensArray[lensArray.length] = 'EF-S 10-22mm f/3.5-4.5 USM';
lensArray[lensArray.length] = 'EF 28-135mm f/3.5-5.6 IS USM';
lensArray[lensArray.length] = 'EF 85mm f/1.8 USM';
lensArray[lensArray.length] = 'EF 17-40mm f/4L USM';
lensArray[lensArray.length] = 'EF 70-200mm f/4L USM';
[/code]

这么写而不是给数字数组下标的好处是,如果你在处理某批照片之前,知道那几个镜头是你肯定没有使用的,就可以用双斜线 // 把相应的代码行注释掉,以减少干扰。

然后,在进入下面的while循环以前,我们假定:
1. EXIF中的使用焦距(Focal Length)存放在变量focLength里
2. 变量 lens 没有定义过
3. 变量 AD 是 PS 里正在使用的文档 (app.activeDocument)

[code]
while (true) {
if (focLength!=undefined){
var fstr = focLength.match('[0-9\\.]{1,}\\s*mm');
if (fstr==null)
var flen = focLength*1;
else
var flen = fstr[0].substring(0,fstr[0].length-2)*1;
}

//读取xmpMeta里的镜头信息,如果有的话
var xmpMeta = AD.xmpMetadata.rawData;
if (xmpMeta.indexOf("<aux:Lens>")!=-1){
var xmpLens = xmpMeta.substring(xmpMeta.indexOf("<aux:Lens>")+10,xmpMeta.indexOf("</aux:Lens>"));
var sub = xmpLens.match('[0-9|\\.]{1,}\\s*\\-\\s*[0-9|\\.]{1,}\\s*mm');

if (sub==null){
sub = xmpLens.match('[0-9|\\.]{1,}\\s*mm');
if (sub!=null) {
var minAuxLen = sub[0].substring(0,sub[0].length-2)*1;
var maxAuxLen = minAuxLen;
}
}else{
var minAuxLen = sub[0].substring(0,sub[0].indexOf('-'))*1;
var maxAuxLen = sub[0].substring(sub[0].indexOf('-')+1,sub[0].length-2)*1;
}
}

var nArray = new Array();   //lenses that match the focLen;
var xArray = new Array();   //lenses that match the xmpLens info;

for (i=0;i<lensArray.length;i++){
var str = lensArray;
var sub = str.match('[0-9]{1,}\\s*\\-\\s*[0-9]{1,}\\s*mm');

if (sub==null){
sub = str.match('[0-9]{1,}\\s*mm');
if (sub!=null) {
var minLen = sub[0].substring(0,sub[0].length-2)*1;
var maxLen = minLen;
}
}else{
var minLen = sub[0].substring(0,sub[0].indexOf('-'))*1;
var maxLen = sub[0].substring(sub[0].indexOf('-')+1,sub[0].length-2)*1;
}

if (minLen!=undefined&&maxLen!=undefined&&minAuxLen!=undefined&&maxAuxLen!=undefined&&
minLen==minAuxLen&&maxLen==maxAuxLen){
xArray[xArray.length] = str;
}

if (minLen!=undefined&&maxLen!=undefined&&flen!=undefined&&(minLen>flen||maxLen<flen))
continue;
nArray[nArray.length] = str;
}

if (xArray.length==1){
var lens = xArray[0];
break;
}else if (xArray.length>1)
nArray = xArray;

if (nArray.length==0)
break;
//nArray=lensArray;
else if (nArray.length==1) {
var lens = nArray[0];
break;
}

//运行到这里,nArray中存放的是匹配的镜头
//弹出对话框选择使用的镜头
var dlg = new Window('dialog', 'Select the lens used',undefined);
dlg.msg = dlg.add('statictext', undefined,'Focal Length = '+flen+'mm F-Stop = '+aptNum);
dlg.msg.alignment = 'center';
dlg.msg.justify = 'left';
dlg.alertBtnsPnl = dlg.add('panel', undefined, 'Lens used');

for (i=0;i<nArray.length;i++){
eval("dlg.alertBtnsPnl.len"+i+" = dlg.alertBtnsPnl.add('radiobutton', undefined, '"+nArray[i]+"')");
eval("dlg.alertBtnsPnl.len"+i+".alignment = 'left'");
eval("dlg.alertBtnsPnl.len"+i+".justify = 'left'");
}

dlg.okBtn= dlg.add('button', undefined, 'OK', {name:'ok'});
dlg.center();
dlg.show();

//检查选择的镜头,如果没选择,给出警告然后重复循环体
for (i=0;i<dlg.alertBtnsPnl.children.length;i++)
if (dlg.alertBtnsPnl.children[i].value)
var lens = dlg.alertBtnsPnl.children[i].text;
if (lens != undefined) break;
alert("You must choose a lens");
}
[/code]

为了方便拷贝/复制代码,我把这段代码摘出来放在
[url]home_comcast_net/~xiongxx/lens.js[/url]

欢迎下载试用,呵呵
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 18.344
主题: 5
帖子: 535
注册: 2003年4月
多谢真皮熊了,经你指点果然找到问题所在,把前面定义Lens改成LensUsed或者删去一切都完美了。我觉得对于像我一样拥有重复焦段镜头的人,使用选择窗口是最好的方法,真皮熊DX功德无量啊。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.011
主题: 0
帖子: 85
注册: 2004年10月
谢谢!下载了最新的,感觉不错,就是少了相机型号,可否加上?
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 18.344
主题: 5
帖子: 535
注册: 2003年4月
先向真皮熊致谢。
你说的问题我再仔细检查整个script看一下,看能不能解决。自己前面写了什么都不知道了,让编辑器检查的时候也没告诉我什么地方不对,看来只能自己一行一行找了。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0
主题: 3
帖子: 120
注册: 2005年2月
xjack: 俺是那段镜头选择对话框代码的作者。放到script文件里警告失效的原因可能是,你在这段代码之前什么地方定义了变量 'lens'。而弹出警告的依据就是“如果lens未定义。。。”。所以你单独运行时有效的,但是整个script里头就不行了。

-----------------------------------------------------------------------------
发现我贴的代码也因为有特殊字符被改动了。贴图吧。奇怪的是这一段测试的时候不选择任何镜头会跳出警告框,但是放到完整的script文件里又不行了。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 18.344
主题: 5
帖子: 535
注册: 2003年4月
发现我贴的代码也因为有特殊字符被改动了。贴图吧。奇怪的是这一段测试的时候不选择任何镜头会跳出警告框,但是放到完整的script文件里又不行了。
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0
主题: 7
帖子: 223
注册: 2005年7月
新的脚本修订完毕,请大家试用。
新修订的压缩包内含有10多种中文字体,所以较大。请大家耐心下载。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.002
主题: 2
帖子: 122
注册: 2003年8月
好像是不能用中文字体名称的,要按照字体的英文名称来使用.

PS:我给出的代码是直接支持使用显示的英文字体的名称的.
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 30.447
主题: 56
帖子: 2248
注册: 2004年7月
众测俱乐部标识
用法:存为脚本文件,在CS/CS2中运行,在D盘根目录下生成Fonts.tx文件,里边即是在CS/CS2里可用的字体显示名和调用名一一对应。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 30.447
主题: 56
帖子: 2248
注册: 2004年7月
众测俱乐部标识
晕啊,还是不行,干脆截张图,呵呵。
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 30.447
主题: 56
帖子: 2248
注册: 2004年7月
众测俱乐部标识
晕,因其中有特定符号,居然把字体和颜色改了,代码也不对了。试试这样行不行:

FILENAME = "d:\\FONTS.txt";

main();

function main() {
var text = '';
for (i=0;i<fonts.length;i++){
text += fonts.name;
for (j=fonts[i].name.length;j<32;j++) text += ' ';
text += '= '+fonts[i].postScriptName+'\n';
}

var file = new File(FILENAME);
file.open('w');
file.writeln(text);
file.close();
alert("Font list has been written to "+FILENAME);
}
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 30.447
主题: 56
帖子: 2248
注册: 2004年7月
众测俱乐部标识
新视线 wrote:

不知字体名称应该以谁为准?
我装了个字体在PS CS2中显示是“Mariette Tryout”,但在程序里这么写就是调用不到。


很多字体在软件显示和系统调用里的名称是不同的。用这个脚本(不包括分隔线)即可:

------------------------------------------------------------
FILENAME = "d:\\FONTS.txt";

main();

function main() {
var text = '';
for (i=0;i<fonts.length;i++){
text += fonts.name;
for (j=fonts[i].name.length;j<32;j++) text += ' ';
text += '= '+fonts[i].postScriptName+'\n';
}

var file = new File(FILENAME);
file.open('w');
file.writeln(text);
file.close();
alert("Font list has been written to "+FILENAME);
}
------------------------------------------------------------

用法:存为脚本文件,在CS/CS2中运行,在D盘根目录下生成Fonts.tx文件,里边即是在CS/CS2里可用的字体显示名和调用名一一对应。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.468
主题: 7
帖子: 404
注册: 2005年3月
黑色边框的——同一个帖子怎么不能够同时上几张图?
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.468
主题: 7
帖子: 404
注册: 2005年3月
综合楼主和各位高手的教本,自己修改了一个,大家看看
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0
主题: 1
帖子: 59
注册: 2005年7月
看下图:
如何修改镜头信息?出现跟风雾兄同样的问题,对镜头的选择不正确.

如何将摄影者的名称放在边框的左下角?
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 18.344
主题: 5
帖子: 535
注册: 2003年4月
风兄:
把下面这段替换掉原来选择镜头的那段,把镜头改成自己的。不过有个小bug,原意是不选择的话就跳出警告窗口,但现在好像即使不选也没问题,不知为啥。
while (true) {
var lensArray = new Array();
lensArray[0] = 'AF-S DX 12-24mm f/4G ED-IF';
lensArray[1] = 'AF-S DX 17-55mm f/2.8G ED-IF';
lensArray[2] = 'AF-S VR 70-200mm f/2.8G ED-IF';

var dlg = new Window('dialog', 'Select the lens used',[0,0,250,110+lensArray.length*30]);
dlg.alertBtnsPnl = dlg.add('panel', [15,45,235,60+lensArray.length*30], 'Lens used');
for (i=0;i<lensArray.length;i++){
eval("dlg.alertBtnsPnl.len"+i+" = dlg.alertBtnsPnl.add('radiobutton', [15,20+"+i*30+",210,35+"+i*30+"], '"+lensArray+"')");
}

dlg.okBtn= dlg.add('button', [90,75+lensArray.length*30,160,95+lensArray.length*30], 'OK', {name:'ok'});
dlg.center();
dlg.show();

for (i=0;i<dlg.alertBtnsPnl.children.length;i++)
if (dlg.alertBtnsPnl.children[i].value)
var lens = dlg.alertBtnsPnl.children[i].text;

if (lens != undefined) break;

alert("You must choose a lens");
}
当然下面这段里的lensUsed也要改成lens才行。
TI.contents = camera+" with "+lensUsed+"\u000D"+"EXIF:"+" "+focalLength+"mm "+" "+exposureTime+"s f/"+fNumber+" "+exposureBiasValue+"EV "+ISOSpeedRatings+" "+Fired+" "+" "+phoDate+" "+phoTime;

选择框的样式如下:
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 29.763
主题: 37
帖子: 665
注册: 2002年11月
谢谢xjack,字体和时间都改好了,上张PP大家看看效果吧!
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0
主题: 0
帖子: 371
注册: 2004年10月
呵呵,谢谢xjack兄弟啦。

btw:
哪位dx给小弟弄个弹出式的镜头规格选择对话框?
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 18.344
主题: 5
帖子: 535
注册: 2003年4月
还有,新视线,调用字体的时候把字体名称当中的空格去掉。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 18.344
主题: 5
帖子: 535
注册: 2003年4月
风兄:
可以做一个弹出的选择对话框。俺看了一下字体文件,好像点就是这么显示的,没办法,其它的标点也不能正常显示。

新视线:
只精确到日期的话,只要将下面这句里最后的+" "+phoTime去掉就行。
TI.contents = camera+" with "+lensUsed+"\u000D"+"EXIF:"+" "+focalLength+"mm "+" "+exposureTime+"s f/"+fNumber+" "+exposureBiasValue+"EV "+ISOSpeedRatings+" "+Fired+" "+" "+phoDate+" "+phoTime;
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0
主题: 7
帖子: 223
注册: 2005年7月
谢谢大家对这个东东感兴趣。LZ正在修改代码,增加了多种非常好的中文字体。另外增加了注释,便于大家修改。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 29.763
主题: 37
帖子: 665
注册: 2002年11月
不知字体名称应该以谁为准?
我装了个字体在PS CS2中显示是“Mariette Tryout”,但在程序里这么写就是调用不到。

另外,时间显示精确到日即可,可不必精确到秒,也省点地方。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0
主题: 1
帖子: 59
注册: 2005年7月
刚刚做出的效果 还有待进一步学习
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0
主题: 0
帖子: 371
注册: 2004年10月
xjack兄:
大小写明白了,感谢
可是俺的签名中www_wxh_cdd_cn的“.”怎么显示成其他字符了呢?
另外关于镜头的信息,俺有17-35、28-70、70-200,在脚本中举例:
if(lens != "")
{
if(lens.indexOf("17.0-35.0 mm")!=-1){
lensUsed = "afs 17-35mm f/2.8d";
}
if(lens.indexOf("28.0-70.0 mm")!=-1){
lensUsed = "afs 28-70mm f/2.8d";
}
if(lens.indexOf("70.0-200.0 mm")!=-1){
lensUsed = "afs vr 70-200mm f/2.8d";
}
if(lens.indexOf("50 mm")!=-1){
lensUsed = "af 50mm f1.4d";
}
}
else
{

//如果没有镜头信息,就使用原来的办法比较

var focLength=parseInt(focalLength);
if(focLength>=17 && focLength<=35){
lensUsed = "afs 17-35mm f/2.8d";
}
if(focLength>=28 && focLength<=70){
lensUsed = "afs 28-70mm f/2.8d";
}
if(focLength>=70 && focLength<=200){
lensUsed = "afs 70-200mm f/2.8d vr";
}
if(focLength=="50"){
lensUsed = "nikon 50mm f1.4d";
}
------------
可是对镜头的选择还是会不正确,如图我是28-70的70mm端,它给辨认为70-200的70mm端?
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0
主题: 1
帖子: 59
注册: 2005年7月
to 头头是道 下载了CS2,按SCRIP-BROWSE-我的黑底白边框,出现下图的问题,咋办啊

======对不起,忘了打开图片.现在弄好了. 还有,跟贴不能自己删除吗?

[中秋月 编辑于 2005-07-27 15:32]
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 18.344
主题: 5
帖子: 535
注册: 2003年4月
风兄误会了,俺说的是你要显示的内容要用大小写混着来,不是字体名称。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 57.797
主题: 11
帖子: 4759
注册: 2004年9月
作个记号,收藏。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.468
主题: 7
帖子: 404
注册: 2005年3月
请教68楼的loverlsg 这样格式的教本怎么编?
感觉窄边的比较好看,而且签名在底部,不影响画面的整洁。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0
主题: 0
帖子: 371
注册: 2004年10月
XJACK兄:
怎么大小写?我试过了,只有全部小写才能按71楼那样显示,还不是68楼那样
----
//字体、字号、颜色和加粗等
TI.font = "babybloc";
//TI.font = "babybloc";
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
回复主题: 数码相片Exif边框脚本俱乐部
功能受限
游客无回复权限,请登录后再试