既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
如果你需要这些资料,可以戳这里获取
2,选中文件:activeDocument
3,把这个属性命名为重设图像大小:resizeImage(width,height)
代码就是这样:
- app.activeDocument.resizeImage(“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已经在运行,就可以看下下拉菜单旁边的绿色链接图标:
这个时候,你可以像这样写:
- alert(“Hello Photoshop!”);
ExtendedScript Toolkit 有一些其他的调试代码的不错特性,但是这一段代码就这样就够了。你可以通过:帮助-JavaScript Tools Guide学到更多如何使用它。
你可以使用任何文本编辑来写代码,只需要保存为.jsx格式文件就好了。你必须在PS里通过File-Scripts-Browse来找到并运行它。 或者是,在PS里面打开脚本文件。你也可以在脚本的前面加上一行代码,这样这个代码就会常在PS里面打开:
- #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然后选择你的期望值。代码就是这样写:
- app.activeDocument.activeLayer.opacity = 50;
你应该可以猜到,activeDocument和activelayer决定了当前选择的文件和图层。
你可以在“Adobe Photoshop CS6 JavaScript Scripting Reference”PDF文件中找到大部分的目标和它们的属性和方法的说明,或者在ExtendedScript Toolkit中通过前往help-object Model Viewer.
让我们来看看在一个真实的例子中是如何运行的。在接下来的段落中,我们将会基于一个动作写一段我们自己的代码。
用代码来重现自我旋转动作
几年前的圣诞节,我有一个想法就是用动作帮助我画一个雪花。
画雪花
1,首先画一支雪花的图案。
2,复制这一支,同时旋转一定的角度。
3,重复第二步直到一个完整的圆。
手动去复制和旋转每一个元素非常麻烦,所以我想出了一个自动的动作(an action to automate it)去完成它。算法是这样的:
1,复制元素。
2,使用变化工具按照你所选择的角度去旋转这个元素。
3,复制图层。
4,使用“重复变换”功能。
5,重复动作4和5直到一个完整的圆。
非常不错!但是这个动作有一个缺点:根据你在第三步设定的角度数值的算法,你只能设定一定数量的雪花的分支。
回到当我还不是很熟悉脚本的时候,我做了几个版本的动作,每一种产生的雪花都是不同的分支数。
今天,我们将用你输入分支的数值的动态脚本来重绘这个动作,让我们开始吧。
算法
当你开始写脚本的时候,在挖掘代码本身之前先设定算法是个不错的主意。在我们的情况下,算法将会是这样的:
1,询问用户输入分支的数目。
2,计算旋转的角度。
3,通过第一步设定的数目来复制并旋转图层。
首先让我们从把当前或选定的图层作为变量保存起来,为了将来使用:
- // Save selected layer to variable:
- var originalStem = app.activeDocument.activeLayer;
在JavaScript 中注意,你可以标记两条双斜线(//)做注解。注解被用来为未来相关部分的代码做解释但是不影响脚本的运行。
现在让我们回到我们的算法上。
1,要求用户输入
我们通过prompt(message,defaultvalue[,tittle])这个功能来获取用户的输入信息:。这个功能表明一个有 着”message”对话框和一个包含这”fefault value”的输入框。当用户点击“确定”,这个给你功能就回到输入值;因此,我们需要保存它为一个可是用的变量。
- // 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);
注意我使用了“orginalStem.name”在这段信息里面。所以对话框会现实所选择图层的名称。
在Mac OS X中,在信息中的第一行是宽的,作用是标题。因此,我们主要的信息应该在第二行。另起一行,输入“\n”.
在Windows中,你可以在功能中指定第三种参数来设定一个标题:
- // Ask user for input by showing prompt box and save inputted value to variable:
- var stemsAmount = prompt(“How many stems do you need?”, 12, "Processing "+originalStem.name);
如果我们在PS中运行这个代码,将会看到这样一个对话框:
当用户点击“确定”,输入值将会保存到stemsAmount变量中。如果用去点击“取消”,这个功能将会返回一个无效值。这个我们后面要使用到。
2,计算旋转的角度
为了计算旋转的角度,我们需要通过分支的数目来分360度(一个整圆):
- // Calculate the rotation angle
- var angle = 360 / stemsAmount;
3,复制和旋转
现在我们已经有了我们需要复制的分支的一切。为了这样去做,我们将使用“for”循环。它可以让我们按照我们想要的次数来反复的运行一段代码。我们的循环将会是这样的:
- for(var i = 1; i < stemsAmount; i++){
- // This code will run “stemAmount - 1” of times
- };
注意第一个在程序中的对象例子已经有了值为0,但是因为我们第一个图层已经在画布上了,我们从1开始这个循环。
为了辅助和旋转我们的图层,我们将会使用:duplicate()和rotate(angle,AnchorPosition)函数:在angle 里面被旋转图层的数目通过复制的指数相乘而得。 Anchorposition决定了哪个图层将会旋转的点。当你在PS中使用旋转工具的时候你可以看到这个点—它看起来是一个小小的加了十字的圆圈。在脚 本中,它仅有9个指定的值-i.e.9个位置的锚点:
在我们这个情况下,它是这个图层按钮的中心。BOTTOMCENTER. PS在这里或那里的一些功能上使用了很多其他的一些常量,你可以在”Adobe Photoshop CS6JavaScript Reference”PDF文件中的197页找到。因此我们的循环就是这个样子:
- // 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);
- };
完整的代码就是下面这个样子,你可以试着运行:
- // 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);
- };
最后的润色
我通常会试着使用脚本来完成我的主要目的。当一切都正确的运行起来的时候,我将会开始优化代码。在我们这种情况下,我们需要确保用户在提示框中输入一个有效的数值—i.e.一个正整数,而且要大于1。
当然,为了不让PS疯掉,我们会限制分支的书目,我们规定,小于100.为了这么做, 当他们提交了一个无效的数值的时候 ,我们需要使用一个“while”循环来告诉用户一个错误的信息。而且这个提示框将会一直存在,直到用户输入一个有效值或者点击“取消”按钮。(记住如果 用户点击取消将会提示无效值)。
新的代码将会是这样的:
- // 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;
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
如果你需要这些资料,可以戳这里获取
. if(stemsAmount == null) break;
11.
[外链图片转存中…(img-EFxMA5up-1715640818119)]
[外链图片转存中…(img-JnVBPtY6-1715640818120)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
如果你需要这些资料,可以戳这里获取
发布者:admin,转转请注明出处:http://www.yc00.com/web/1755036753a5230478.html
评论列表(0条)