这是我花很长时间整理的资料,希望能给大家的设计带来帮助!
对于每个设计师来讲自动化都是非常有用的,它可以迅速简单的解决问题,节省很多宝贵的时间。
今天,我为您介绍一种先进的自动化技术:脚本。你需要的是具备JavaScript的知识,其中一些我们的Web设计师已经有了基本的了解。
其实我前几年就已经对Photoshop scripts有所了解,但是最近才深入研究了一下,我一直避免使用它,因为我认为这是属于程序员的工作。但是我错了,今天我将表明虽然它需要一些基本的编程技巧,但是脚本并不难掌握。 但是首先,我们将回答学习者的几个疑惑。
我们为什么需要脚本?
为什么我们会学习到脚本,Photoshop中已经有相当不错的功能了?答案是交互性。当你使用一个操作,你不能真正控制它的行为在不同情况下;它就像我们在播放一部电影,反复不断的播放,却没有任何改变。 脚本是更加动态,根据你的参数输入或应用程序的上下文的变化做出不同的操作。听起来很有用,不是吗?
必要技能
其实你并不需要具备高级程序员的能力,就可以开始写脚本了;我也仅仅是个设计师,和你一样。但是你至少需要了解JavaScript的基础知识。 如果你不懂JavaScript,也不用害怕,有需要学习的地方,比如 Codecademy, 有许多互动式教学的课程。 我使用的是Adobe Photoshop CS5, 但是对于更新的版本也是一样适用的。 Adobe在CS5之后的版本并没有对API有过多的更新。我参考的也是CS6的脚本文档。so,follow me!
开始学习
当你在Photoshop记录操作时,按照你指定的步骤完成预期的结果--这就是你的算法。然后,你点击Record,在Photoshop中一步一步重复这些操作。脚本是相似的,只不过是通过你编写的代码来代替这些步骤,大多数的Photoshop的操作在脚本中都有相对应的函数。 让我们看看这样一个操作,将一个文档的尺寸放大到150%,我们可以通过下面的操作来实现: 打开 Image → Image Size. 按下 150% 在width 和 height. 点击 “OK.”
我们使用脚本的处理过程如下: 代码如下所示: - app.activeDocument.resizeImage("150%", "150%");
复制代码 编程语言
有三种编程语言来编写Photoshop脚本:Mac上的AppleScript,Windows系统上的VBScript, 可以运行在所有平台的JavaScript,使用JavaScript的原因是,它是跨平台的,并且我对它有一些使用经验。
工具
Adobe提供了一个非常实用的脚本编辑器ExtendedScript Toolkit.
Adobe ExtendedScript Toolkit的窗口。这个工具是Photoshop自带的,我们可以在下面的路径中找到它: Mac OS X
/Applications/Utilities/Adobe Utilities CS6/ExtendScript Toolkit CS6/ Windows
C:\Program Files\Adobe\Adobe Utilities - CS6\ExtendScript Toolkit CS6
(or Program Files (x86) for 64-bit machines)
ExtendedScript Toolkit用户界面是非常简单漂亮的。开始编写脚本,在下图中的下拉菜单选择对于的应用,如果Photoshop启动了,铁链标志将会显示绿色。
现在我们可以在里面编写 - alert("Hello Photoshop!");
复制代码按下 cmd + R (或者在工具栏中点击 “Play” ) 运行你的脚本。ExtendedScript Toolkit会切换到Photoshop然后显示一个如下面的弹出框:
ExtendedScript Toolkit具有很棒的debugg功能,我们可以使用 Help → JavaScript Tools Guide来学习更多的编辑器功能的使用。
你也可以使用任何的文本编辑器来编写脚本,只需保存为 .jsx 文件。运行脚本,我们在Photoshop中打开 File → Scripts → Browse 选中你的脚本。或者你在脚本的顶部协商下面的代码,默认就会使用Photoshop打开:
保存你的脚本在 Photoshop/Presets/Scripts/ 目录,访问文件打开 File → Scripts 。我们也可以设置快捷键,打开 Edit → Keyboard Shortcuts, 在 File → Scripts → [your script’s name], 设置你需要的快捷键。
ExtendedScript Toolkit可以在这个开发环境中运行和debug代码,并且有一个内置对象模型查看器,这是非常有用的。 所以我强烈建议大家使用它来编写脚本,在Mac版本中有时候会出现崩溃的情况,所以大家注意一下。
PHOTOSHOP对象模型
为了更容易的编写脚本,我们需要明白Photoshop的 Document Object Model (DOM)所涉及的一些东西。明白它并不是很难的。Photoshop’s DOM主要的对象是application(应用),其实就是整个Photoshop软件本身,在application中保存了我们在Photoshop打开的所有文档(图片)。
每个文档又包括很多元素 — 例如图层layers (称为 ArtLayers), 图层组 (LayerSets), 通道, 历史状态等等 — 就像一个完整的PSD document文档。
Photoshop’s DOM 简化图示
我们可以使用这些对象的属性和方法,例如,修改选中图层的透明度,获取这个方法的过程是 Application → Document → Layer → Opacity 然后设置指定值。代码如下: - app.activeDocument.activeLayer.opacity = 50;
复制代码和你猜测的是一样的, activeDocument 和 activeLayer 分别代表当前选中的文档和图层。
让我们来看一个真实的实例,下面的内容,我们将会自己写一个操作的脚本。
将旋转操作写成一个脚本
在好久以前的圣诞节,我需要一个方法来帮助我画一个雪花。 PHOTOSHOP画雪花教程
画雪花其中一个部分的图案 复制图案,将它向右旋转一点 重复第二步,直到你画出一个完整的雪花
复制小图案 旋转你指定的角度,使用 Transform 工具 复制图层 使用“Repeat Transform” 函数 重复第4和第5步直到做出完整的雪花。
相对棒的操作,但是有一个缺点。我们在第二部指定一个固定的角度,所以生成的雪花瓣的数量就是固定值了。 以前我不懂脚本,所以我只能多次重复这个过程,指定不同的角度得到不同的雪花瓣 今天, 我们将实现这个动态操作,会有一个弹出框设定你需要雪花瓣的数量,开始吧!
算法当你开始编写脚本之前,定义一个算法是一个非常好的习惯,在这个例子中,我们的算法如下: 提示用户输入雪花瓣的数量 计算旋转角度 复制和旋转在第一步得到的图层数量
开始保存当前或者选中的图层作为对象,方便后面使用: - var originalStem = app.activeDocument.activeLayer;
复制代码注意在Javascript中,我们使用双斜线(//)表示后面的内容是注释,主要用来描述代码的作用,对于脚本是没有任何影响的。 现在我们要实现我们的算法:
1. 提示用户输入雪花瓣的数量
弹出一个对话框提示用户输入值可以使用 prompt(message, default value[, title]) 函数。这个函数显示一个对话框并且带有message 和一个文本框字段包含 default value, 当用户点击 “OK,”函数返回用户输入的值,所以我们必须要保存用户输入的值。 var stemsAmount = prompt("Processing \""+originalStem.name+"\"\nHow many stems do you need?", 12);
注意,我使用了 originalStem.name 在信息中,所以对话框中会显示选中图层的名称。
在 Mac OS X中,第一行的信息会是粗体,第二行是主要的信息,这里使用 \n来换行。 在Windows中, 你可以设置在函数中设置第三个参数作为标题,如下: - var stemsAmount = prompt("How many stems do you need?", 12, "Processing "+originalStem.name);
复制代码如果我们在Photoshop中运行代码,它将显示下面的对话框:
当用户点击“OK,” 输入框中的值将会保存在 stemsAmount 变量中,如果用户点击 “Cancel,”函数将会返回 null ,也就是空值,后面我们将会使用到。
2. 计算旋转角度计算选择的角度应该是非常简单的,我们只需要使用360除以上一步用户输入的需要雪花瓣数量就可以了: - angle = 360 / stemsAmount;
复制代码 3. 复制和旋转现在我们需要复制雪花瓣,为实现复制,我们要使用到 for循环: - for(var i = 1; i < stemsAmount; i++){ // 代码将会运行"stemAmount - 1"次 };
复制代码复制和旋转图层,我们将使用到 duplicate() 和 rotate(angle, AnchorPosition)方法: angle 的值就是角度乘以旋转的次数, AnchorPosition 代表图层围绕旋转的点。这个点我们可以在使用旋转用具的时候看到-里面有一个小的十字架,在脚本中,它有9个特殊的值,如下图所示:
- for(var i = 1; i < stemsAmount; i++){
- var newStem = originalStem.duplicate();
- newStem.rotate(angle * i, AnchorPosition.BOTTOMCENTER);
- };
复制代码完成的代码如下所示,你可以试着运行它: - // Save selected layer to variable:
- var originalStem = app.activeDocument.activeLayer;
- // Ask user for input by showing prompt box and save inputted value to variable:
- var stemsAmount = prompt("Processing ""+originalStem.name+""\nHow many stems do you need?", 12);
- // Calculate the rotation angle:
- var angle = 360 / stemsAmount;
- // Duplicate and rotate layers:
- for(var i = 1; i < stemsAmount; i++){
- // Duplicate original layer and save it to the variable
- var newStem = originalStem.duplicate();
- // Rotate new layer
- newStem.rotate(angle * i, AnchorPosition.BOTTOMCENTER);
- };
复制代码
后期处理
我通常会尝试实现与脚本的主要目标,而当一切工作正常,我将开始提炼的代码。在我们的例子中,我们必须确保用户在提示框中输入一个有效的数字 - 即一个正整数,大于1的值。 此外,为了防止Photoshop崩溃,我们将限制雪花瓣的数量 - 比方说,100。要做到这一点,我们将使用一个while循环来显示用户在提交无效的情况下显示错误信息,并且提示框会继续显示,直到用户输入一个有效的值,或点击“取消”按钮(记得如果用户点击“取消”)的提示下返回null。 新的代码如下所示: - // Save selected layer to variable:
- var originalStem = app.activeDocument.activeLayer;
- // Ask user for input by showing prompt box and save inputted value to variable:
- var stemsAmount = prompt ("Processing ""+originalStem.name+""\nHow many stems do you need? (From 2 to 100)", 12);
- // Check that user entered a valid number and, if invalid, show error message and ask for input again
- while(isNaN(stemsAmount) || stemsAmount <= 0 || stemsAmount > 100){
- // If user clicks "Cancel" button, then exit loop
- if(stemsAmount == null) break;
- // Show error message…
- alert("Please enter number in range from 2 to 100");
- // …and ask for input again
- stemsAmount = prompt("Processing ""+originalStem.name+""\nHow many stems do you need? (From 2 to 100)", 12);
- };
- // Run the copying process
- if(stemsAmount != null){
- // Calculate the rotation angle
- var angle = 360 / parseInt(stemsAmount);
- // Duplicate and rotate layers:
- for(var i = 1; i < stemsAmount; i++){
- // Duplicate original layer and save it to the variable
- var newStem = originalStem.duplicate();
- // Rotate new layer
- newStem.rotate(angle * i, AnchorPosition.BOTTOMCENTER);
- };
- };
复制代码你可以已经注意到,我们使用了 isNaN(value) 函数,它会返回 true 如果 value “不是一个数值” , parseInt(value) 会转化 value 成一个整数值,因为我们计算角度的需要。
下一步我们将会管理图层,我们使用索引重命名图层。此外,以确保我们不要弄乱文件的图层,让我们把雪花瓣放置到一组。
重命名图层不是一个困难的任务,我们使用图层的 name 属性,并且给它添加索引值: - newStem.name = originalStem.name + " " + (i+1);
复制代码Photoshop的 API称为 LayerSet 我们访问文档所有图层组要调用 layerSets 的属性,添加新的群组,我们调用layerSet的方法 add() - var stemsGroup = app.activeDocument.layerSets.add();
- stemsGroup.name = originalStem.name + " ("+stemsAmount+" stems)";
复制代码然后,我们添加图层到图层组中,使用 move(relativeObject, ElementPlacement)函数。 ElementPlacement 是一个常量,这个决定我们如何将我们的层相对的地方......嗯,relativeObject。在我们的例子中,我们将使用ElementPlacement.INSIDE将原图层放置到一个组中 - originalStem.move(stemsGroup, ElementPlacement.INSIDE);
复制代码我们将放置每个图层的副本在图层组的底部使用ElementPlacement.PLACEATEND,所有的图层就会按顺序放在图层中了: - newStem.move(stemsGroup, ElementPlacement.PLACEATEND);
复制代码
最终代码大功告成! RotateMe.jsx 已经完成了,最终的代码如下: - // 将选中的图层保存到变量originalStem中
- var originalStem = app.activeDocument.activeLayer;
- // 提示用户输入值,然后将获取的值保存到变量stemsAmount中
- var stemsAmount = prompt("Processing ""+originalStem.name+""\nHow many stems do you need?", 12);
- // 处理用户输入的值是否有效,如果无效将会显示错误信息,并且在此显示提示框
- while(isNaN(stemsAmount) || stemsAmount <= 0 || stemsAmount > 100){
- // 用户是否点击了"Cancel"按钮,如果是,就会推出循环
- if(stemsAmount == null) break;
- // 显示错误信息
- alert("Please enter number in range from 2 to 100");
- // 再次提示用户输入值
- stemsAmount = prompt("Processing ""+originalStem.name+""\nHow many stems do you need? (From 2 to 100)", 12);
- };
- // 运行复制处理
- if(stemsAmount != null){
- // 计算选择角度
- var angle = 360 / parseInt(stemsAmount);
- // 创建图层组
- var stemsGroup = app.activeDocument.layerSets.add();
- stemsGroup.name = originalStem.name + " ("+stemsAmount+" stems)";
- // 将原始图放入图层组
- originalStem.move(stemsGroup, ElementPlacement.INSIDE);
- // 复制和旋转图层
- for(var i = 1; i < stemsAmount; i++){
- // 复制原始图层保存到变量中
- var newStem = originalStem.duplicate();
- // 旋转新图层
- newStem.rotate(angle * i, AnchorPosition.BOTTOMCENTER);
- // 添加索引到图层
- newStem.name = originalStem.name + " " + (i+1);
- // 放置新的图层到图层组
- newStem.move(stemsGroup, ElementPlacement.PLACEATEND);
- };
- // 添加索引到原始图层
- originalStem.name += " 1";
- };
复制代码
现在你将文件放置到 Photoshop/Presets/Scripts/ 文件夹中,打开 File → Scripts 运行脚本,使用不同的图形,不同的值,会得到非常有趣的结果:
总结正如你可以从下面的参考资料部分的链接数量看,还有更多要说的,其实脚本无法在一篇文章全部都介绍清楚。但我希望,我的文章能激起了你的兴趣,并说明脚本是如何强大和有用。 如果你决定深入的研究,让我们一起学习和分享,我们学习交流QQ群:99318241,在群里你可以提问和分享资源。 让我们一起使Photoshop更加适用! 资源我同样也还在学习Photoshop脚本,下面是我学习的所有资料,现在提供给大家一起学习:
百度网盘下载地址:http://pan.baidu.com/s/1iWgz8
|
举报