Photoshop脚本编程简介
⾃动化对每个设计师的⼯作来说是很有⽤的。它可以在重复的任务上节省宝贵的时间,还能够帮我们更快捷、更容易的解决⼀系列问题。
你可以使⽤photoshop的动作来使⼯作流程⾃动化,这是很流⾏的,⼤多数⼈都知道并且已经在使⽤的⽅法。今天,我们将介绍给你⼀种⾼级的⾃动化技巧:脚本语⾔。所有的这⼀切仅仅需要你有⼀点点关于JavaScript的基本知识,这对于我们中的⼀些⽹页设计师往往都是具备的。
我很多年前就知道Photoshop的脚本语⾔,但是我⼏个⽉前才开始决定研究它。我忽视了它是因为我认为那是聪明的具有数学思维能⼒的程序员的领域。但是我错了,今天我将要来告诉⼤家,尽管它需要⼀些基本的程序技巧,脚本语⾔并不是那么难掌握。
但是,⼀开始,我们得回答以下这⼏个明显的问题:
为什么我们需要脚本语⾔?
为什么我们在Photoshop已经有了很棒的动作之后还要需要学习脚本语⾔?答案是交互性!当你使⽤动作时,你不能真正的控制它在不同的情况下的表现,就像录像带不停的⼀遍⼜⼀遍的播放⽽没有任何改变。
⼀个脚本语⾔更灵活,它表现形式的改变取决于你输⼊的参数或者是应⽤程序的内容。听起来很有⽤?不是么?
要求
你不需要是⼀个会写脚本语⾔的⾼级的程序员。我就仅仅是⼀个平⾯设计师,就像你们⼤多数⼈⼀样。但是你需要对JavaScript⾄少有⼀个基本的了解,以及⼀些属性和⽅法的经验去领悟这篇⽂章的⼤部分内容。
如果你对JavaScript⼀点都不了解,别害怕!有很多地⽅你可以了解程序的⼀些基本知识。例如:Codecademy,有很棒的完整的交互式课程。
我使⽤CS5,但是这篇⽂章中讲的也同样适⽤于新版本。Adobe从CS5开始已经没有对其脚本API进⾏更新。我会选择看最新的脚本⽂档版本,虽然它是cs6的.
开整
当你开始在PS中记录动作的时候,你设定了⼀个达到某⼀结果的步骤顺序,这就是你的算法。然后你按下开始动作,在PS⾥⾯就⼀个接⼀个的重复你刚才的动作。脚本也差不多,但是不会⼀步⼀步的在PS中完成,⽽是你把它们⼀条⼀条的写出来。在PS⾥⾯⼤多数你想要完成的动作都有相同的功能按钮可以完成。
如果你需要创造⼀个动作将你的⽂件从原始⼤⼩放⼤到150%,你需要完成以下⼏步:
1,打开图像-图像⼤⼩
2,长宽输⼊150%
3,点击确定。
同样的脚本语⾔会是这样写:
1,为这个应⽤命名为:app
2,选中⽂件:activeDocument
3,把这个属性命名为重设图像⼤⼩:resizeImage(width,height)
代码就是这样:
1. sizeImage("150%", "150%");
语⾔
有三种⽅式在PS⾥⾯写脚本:在mac上⽤AppleScript, Windows⽤VBScript,或者⽤JavaScript在两者上都可以。我使⽤第三种⽅式,因为它可以跨平台,并且我有⼀定JavaScript的基础。
⼯具
Adobe有它⾃⼰的写脚本的⼯具,叫做:ExtendedScript Toolkit.
这个⼯具包在PS⾥⾯,你可以在这个⽂件夹中中到:
Mac OSX: /Applications/Utilities/Adobe Utilities CS6/ExtendScript ToolkitCS6/
Windows: C:\Program Files\Adobe\Adobe Utilities-CS6\ExtendScriptToolkit CS6(64位的Program Files(x86))
ExtendedScript Toolkit的⽤户界⾯⾮常的简单。开始写代码,第⼀步就是要在下拉菜单中选择⽬标应⽤。如果PS已经在运⾏,就可以看下下拉菜单旁边的绿⾊链接图标:
这个时候,你可以像这样写:
1. alert("Hello Photoshop!");
ExtendedScript Toolkit 有⼀些其他的调试代码的不错特性,但是这⼀段代码就这样就够了。你可以通过:帮助-JavaScript Tools Guide学到更多如何使⽤它。
你可以使⽤任何⽂本编辑来写代码,只需要保存为.jsx格式⽂件就好了。你必须在PS⾥通过File-Scripts-Browse来到并运⾏它。或者是,在PS⾥⾯打开脚本⽂件。你也可以在脚本的前⾯加上⼀⾏代码,这样这个代码就会常在PS⾥⾯打开:
1. #target photoshop
直接保存你的代码在 Photoshop/Presets/Scripts/,然后通过File-Scripts访问它们。你也可以设定⼀个快捷键,前往 Edit-Keyboard Shortcuts,链接到 File-Script-[你的代码名称],然后选择⼀个你想要设定的快捷键。
ExtendedScript Toolkit可以在整合的开发环境下运⾏和调试代码,同时它还有⼀个⽬标模型指⽰器来安装,这是很有⽤的。所以我推荐使⽤toolkit来写脚本。不幸的是,Mac版本的有时候会崩溃,所以要记住这⼀点。
Photoshop对象模型
为了使脚本写起来简单些,你需要懂得在Photoshop⽂件对象模型(DOM)中事件是怎样互相联系的。如果你观察PS本⾝,理解起来并不困难。PS的DOM⾥⾯最主要的对象就是应⽤程序。在应⽤程序⾥⾯,我们有⼀个⽂件夹在PS⾥⾯是当前打开的(翻译错误!本⼈认为应该纠正为:应⽤程序⾥有photoshop当前打开的⼀系列⽂件)。
每⼀个⽂件包含⼀些元素:例如图层(被称为Artlayers),图层组(layerSets),通道,历史记录等等–就像⼀个普通的PSD⽂件。
下⾯就是⼀个简单的可视化的PS的DOM。更详细的包含层级的可以在”Adobe Photoshop CS6 Scripting Guide”Pdf⽂件中12页⾥到。
⼀个简单的可视化的Photoshop DOM
这⾥⾯的每⼀个⽬标都有它⾃⼰的属性和⽅法你可以编辑它。例如,在⼀个⽂件中改变所选图层的透明度,你就可以前往Application-Document-layer-Opacity然后选择你的期望值。代码就是这样写:
1. app.activeDocument.activeLayer.opacity = 50;
你应该可以猜到,activeDocument和activelayer决定了当前选择的⽂件和图层。
你可以在“⽂件中到⼤部分的⽬标和它们的属性和⽅法的说明,或者在ExtendedScript Toolkit中通过前往help-object Model Viewer.
让我们来看看在⼀个真实的例⼦中是如何运⾏的。在接下来的段落中,我们将会基于⼀个动作写⼀段我们⾃⼰的代码。
⽤代码来重现⾃我旋转动作
⼏年前的圣诞节,我有⼀个想法就是⽤动作帮助我画⼀个雪花。
画雪花
1,⾸先画⼀⽀雪花的图案。
2,复制这⼀⽀,同时旋转⼀定的⾓度。
3,重复第⼆步直到⼀个完整的圆。
⼿动去复制和旋转每⼀个元素⾮常⿇烦,所以我想出了⼀个⾃动的动作(an action to automate it)去完成它。算法是这样的:1,复制元素。
2,使⽤变化⼯具按照你所选择的⾓度去旋转这个元素。
3,复制图层。
4,使⽤“重复变换”功能。
5,重复动作4和5直到⼀个完整的圆。
⾮常不错!但是这个动作有⼀个缺点:根据你在第三步设定的⾓度数值的算法,你只能设定⼀定数量
的雪花的分⽀。
rotate属性回到当我还不是很熟悉脚本的时候,我做了⼏个版本的动作,每⼀种产⽣的雪花都是不同的分⽀数。
今天,我们将⽤你输⼊分⽀的数值的动态脚本来重绘这个动作,让我们开始吧。
算法
当你开始写脚本的时候,在挖掘代码本⾝之前先设定算法是个不错的主意。在我们的情况下,算法将会是这样的:
1,询问⽤户输⼊分⽀的数⽬。
2,计算旋转的⾓度。
3,通过第⼀步设定的数⽬来复制并旋转图层。
⾸先让我们从把当前或选定的图层作为变量保存起来,为了将来使⽤:
1. // Save selected layer to variable:
2. var originalStem = app.activeDocument.activeLayer;
在JavaScript 中注意,你可以标记两条双斜线(//)做注解。注解被⽤来为未来相关部分的代码做解释但是不影响脚本的运⾏。
现在让我们回到我们的算法上。
1,要求⽤户输⼊
我们通过prompt(message,defaultvalue[,tittle])这个功能来获取⽤户的输⼊信息:。这个功能表明⼀个有着”message”对话框和⼀个包含这”fefault value”的输⼊框。当⽤户点击“确定”,这个给你功能就回到输⼊值;因此,我们需要保存它为⼀个可是⽤的变量。
1. // Ask user for input by showing prompt box and save inputted value to variable:
2. var stemsAmount = prompt("Processing \""+originalStem.name+"\"\nHow many stems do you need?", 12);
注意我使⽤了“orginalStem.name”在这段信息⾥⾯。所以对话框会现实所选择图层的名称。
在Mac OS X中,在信息中的第⼀⾏是宽的,作⽤是标题。因此,我们主要的信息应该在第⼆⾏。另起⼀⾏,输⼊“\n”.
在Windows中,你可以在功能中指定第三种参数来设定⼀个标题:
1. // Ask user for input by showing prompt box and save inputted value to variable:
2. var stemsAmount = prompt("How many stems do you need?", 12, "Processing "+originalStem.name);
如果我们在PS中运⾏这个代码,将会看到这样⼀个对话框:
当⽤户点击“确定”,输⼊值将会保存到stemsAmount变量中。如果⽤去点击“取消”,这个功能将会返回⼀个⽆效值。这个我们后⾯要使⽤到。
2,计算旋转的⾓度
为了计算旋转的⾓度,我们需要通过分⽀的数⽬来分360度(⼀个整圆):
1. // Calculate the rotation angle
2. var angle = 360 / stemsAmount;
3,复制和旋转
现在我们已经有了我们需要复制的分⽀的⼀切。为了这样去做,我们将使⽤“for”循环。它可以让我们按照我们想要的次数来反复的运⾏⼀段代码。我们的循环将会是这样的:
1. for(var i = 1; i <stemsAmount; i++){
2.    // This code will run "stemAmount - 1" of times
3. };
注意第⼀个在程序中的对象例⼦已经有了值为0,但是因为我们第⼀个图层已经在画布上了,我们从1开始这个循环。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。