Photoshop脚本编程入门及简单代码

1.photoshop脚本的语言环境是JAVA。
与coreldRAW不同,adobe公司出品的软件,例如photoshop,flash等等,动作和脚本支持的语言环境是JAVA Script,coreldRAW的宏的语言环境是VBA。
JAVA跟C语言比较像,都是面向对象的程序语言,而VBA跟VB差不多,是面向过程的程序语言。
coreldRAW的宏文件gms必须在Microsoft Visual Basic窗口里面才能编辑,但是photoshop的脚本jsx文件,可以在文本文档里面编辑,这点非常具有开拓性,因为不是所有电脑都装有编程软件,但是所有电脑都有文本文档。
我在javascript窗口里面编辑过jsx脚本,也在文本文档里面编辑过,感觉在文本文档里面编程的感觉很奇妙,没有关键词提示,也没有自动纠错,而且,也不是乱码,真的很奇妙。
2.如何新建一个photoshop脚本。
因为flash是动作,所以脚本以photoshop为例。
随便在任何位置,新建一个文本文档.txt,后缀名是.txt,把这个后缀名改成.jsx,就是文本文档.jsx,一个空白脚本就建立完了。
3.如何运行一个photoshop脚本。
好像是photoshop cs以上版本才有运行脚本的功能。
Photoshop窗口,文件——脚本——浏览,载入需要运行的脚本文件,就运行了脚本。
其实,photoshop的批处理、录制动作等等功能都挺强大的,能满足很大的要求,而编辑脚本,是精益求精,更上一层楼的选择,对工作人员的个人能力要求很高,首先,你需要有一定的编程基础,对JAVA语言有些了解,其次,你需要对于photoshop的一些专有代码有了解,最后,英语最好好一些,因为,最有用的photoshop脚本的帮助文档都是纯英文的,中文的书籍教程资料很少。我英语不好,所以,我看帮助文档和向导,都快看吐了。
知识因为分享而更有价值,学习因为交流而更快进步。
我在这里分享几个javascript的脚本,希望能帮助到看此文的朋友。
这是我第一次写脚本,因为我有一定的程序基础,coreldRAW的VBA我写得很多,但毕竟语言环境不一样,幸好,我最近在做flash的东西,一些功能原有模块无法实现,必须自己 编写程序,所以短期强化了一下JAVA编程语言,没想到竟然赶鸭子上架用上了。
挺巧合的,技多不压身,用上了也好。
因为我也是第一次编写脚本,所以内容也很简单,对于初学者应该有帮助。
我先介绍一下我的目的。
假设,我有800张1960年的航片,我需要将这800张航片拼接成一个大图像。
1.
我需要先把这800张航片扫描成电子版,文件格式为tif格式,并把这些航片编号(纸质航片的原编号就可以)。1960年的航片都是纸质照片,只能这么做。
2.
根据航片的编号,确定这些航片涉及几条航带n,每条航带上有多少张航片m;
在photoshop中打开一条航带上的两张相邻航片,量算出航片之间的重合度x(不是百分百,是距离);
然后打开两条相邻航带上两张相邻航片,量算出航带之间的重合度y(不是百分百,是距离)。
3.
打开photoshop,文件——自动——联系表,根据航带和航片的数量,还有航片的尺寸,确定宽度、高度、列数、行数,根据航向确定位置,生成联系表文件,注意不要勾选“拼合所有图层”,拼完的文件会是一个分图层的psd文件。
这是Photoshop拼影像的方法,因为老航片都是扫描的,没有电子文件,也不带坐标,所以这么拼接,但如果是新的航片,带坐标文件的,一般都用erdas拼图就可以了。
注意Photoshop的拼图功能,此处不赘述了。
4.
Photoshop联系表的间距不能有负数,但是航片有重合度,必须是要有负数的。
关于这点,除了JAVA之外,还可以录制动作批处理,可以先录制裁切的动作,把每张航片的重复内容裁切掉,在联系表里面以0间距来拼合图像。
这是一种方法,我这里介绍JAVA脚本。
联系表拼合完之后,可以看到生成psd文件,每张航片是一层,图层名就是航片的名称,录制动作批处理也能实现目的,只不过比较麻烦而已。
5.脚本代码,有些东西三言两语解释不清,自己看程序代码吧。
以下代码是一条纵向航带的拼合,航片之间重合度为x,程序原理是,第i个图层就要向上移动i*x,第0个图层移动0,第1个图层移动x,第2个图层移动2x,以此类推,注意执行环境的度量单位,我的航片重合度是3.92cm,但是我程序中的换算出的系数是435,度量单位到底是什么,我真的懵了。
if (documents.length == 0) {
alert(‘没有文件可以处理’);
} else {
var visibility = false;
var docRef = activeDocument;
var layers = docRef.layers;
if (layers.length == 1 && docRef.activeLayer.isBackgroundLayer == 1) {
alert(‘没有图层可供处理’);
} else {
for (var i = 0; i < layers.length; i++) {
layers[i].translate(0,435*i);
}
}
}
6.
这个程序是基础框架,在此基础上,我还编写了图层重命名、图层重排序,倒序拼合重合度等脚本。
第一次编写脚本就如此匆忙而紧迫,但好歹都编写出来了,没有丢面子,六小时之内,四个脚本。主要比较难搞的是,度量单位的换算,关键执行语句的代码,就像上面的那个代码里面,移动是translate,但是在Corel里面都是move或者move to,如果有时间的话,还是熟悉一下Adobe脚本的框架比较有用。
同样,平时多专研专研,虽然看上去学了没有用似的,但是关键时刻,有可能用得上。
希望这个简单的JAVA脚本教程,对大家有帮助。



发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

(Spamcheck Enabled)

最新评论