Photoshop学习序列图处理工具
Vivian 2018-05-07 来源 : 阅读 1586 评论 0

摘要:本文主要介绍了Photoshop序列图处理工具,通过具体的解释说明,让我们从中学到Photoshop序列图处理工具的重点所在,让我们对序列图处理工具越来越熟悉,能够在以后的学习中更加快速的弄明白,便于更好的操作。

本文主要介绍了Photoshop序列图处理工具,通过具体的解释说明,让我们从中学到Photoshop序列图处理工具的重点所在,让我们对序列图处理工具越来越熟悉,能够在以后的学习中更加快速的弄明白,便于更好的操作。

 

先说下一下执行脚本的方法:

a、如果你习惯了专业的编程工具,搭建一套环境也很方便。本人使用的是notepad++,安装一个NppExec插件,直接按F6,如下设置并保存。

 Photoshop学习序列图处理工具

在这里我可以顺便说下AE执行脚本也可以这么玩。唯有一地不同就是AfterFX.exe有很多标记,标记后面带一个参数,下面是几种常用的。

AfterFX.exe
-wf opens AE in watch folder mode
-s script command
-r script
-m  u can have 2+ projects open

notepad++执行AE的脚本环境搭建如下设置:

 Photoshop学习序列图处理工具

b、文件->脚本->浏览找到.jsx后缀的脚本

c、把脚本放置D:\Program Files (x86)\Adobe\Adobe Photoshop CS6 (64 Bit)\Presets\Scripts路径下,这是我的路径。重启Photoshop将会看到如下图(我已设置了快捷键):

 Photoshop学习序列图处理工具

 

 

PYC_PhotoshopTool.jsx脚本如下,欢迎修改到自己工作流程里。

[javascript] view plain copy
1. #target photoshop  
2.   
3. var win = new Window("dialog", "小彭友工具集pfkue126@126.com");  // bounds = [left, top, right, bottom]  
4.   
5. win.btnPanel = win.add("panel", [25,10,255,100], "图层批量重命名    |   基于像素裁切");  
6. win.btnPanel.add("statictext", [10, 20, 320, 35], "前缀名");  
7. newName_ed = win.btnPanel.add("edittext", [50, 20, 110, 38], "");  
8. reName_bt = win.btnPanel.add("button", [10, 45, 110, 70], "重命名");  
9. cutImage_bt = win.btnPanel.add("button", [130, 20, 210, 70], "裁切");  
10.   
11. win.btnPanel = win.add("panel", [25,10,255,100], "导入序列/自动分配到图层");  
12. win.btnPanel.add("statictext", [10, 20, 320, 35], "导入路径");  
13. importImagePath_ed = win.btnPanel.add("edittext", [60, 20, 175, 38], "C:\\Users\\Administrator\\Desktop");  
14. importSelectPath_bt = win.btnPanel.add("button", [180, 18, 220, 38], "选择...");  
15. win.btnPanel.add("statictext", [10, 50, 320, 65], "过滤");  
16. filter_ed = win.btnPanel.add("edittext", [40, 50, 100, 68], "*.png");  
17. importImage_bt = win.btnPanel.add("button", [110, 45, 220, 70], "导入");  
18.   
19. win.btnPanel = win.add("panel", [25,10,255,100], "导出每层");  
20. win.btnPanel.add("statictext", [10, 20, 320, 35], "导出路径");  
21. exportImagePath_ed = win.btnPanel.add("edittext", [65, 20, 175, 38], "C:\\Users\\Administrator\\Desktop");  
22. exportSelectPath_bt = win.btnPanel.add("button", [180, 18, 220, 38], "选择...");  
23. win.btnPanel.add("statictext", [10, 50, 320, 65], "格式");  
24. format_li = win.btnPanel.add("DropDownList", [40, 50, 100, 68]);  
25. var item = format_li.add ('item', 'png');  
26. item = format_li.add ('item', 'jpg');  
27. format_li.selection = format_li.items[0];  
28. exportImage_bt = win.btnPanel.add("button", [110, 45, 220, 70], "导出");  
29.   
30. reName_bt.onClick = function()  
31. {  
32.     if (newName_ed.text != null) {  
33.     for (i=0; i<app.activeDocument.layers.length;i++)  
34.         {  
35.             app.activeDocument.layers[i].name = newName_ed.text+"_"+(app.activeDocument.layers.length-i);  
36.         }  
37.     }  
38.     // alert(newName_ed.text);  
39. };  
40.   
41. cutImage_bt.onClick = function()  
42. {  
43.     cut_image_BasePixel();  
44.     alert("裁切已完成!");  
45. };  
46.   
47. importSelectPath_bt.onClick = function()  
48. {  
49.     var sourceFolder = Folder(importImagePath_ed.text);  
50.     var selectPath = sourceFolder.selectDlg("请选择导入的序列所在文件夹");  
51.     importImagePath_ed.text = selectPath;  
52. };  
53.   
54. importImage_bt.onClick = function()  
55. {  
56.     var sourceFolder = Folder(importImagePath_ed.text);  
57.     var seq_file = sourceFolder.getFiles(filter_ed.text);  
58.       
59.     var currentDoc = open(new File(seq_file[0]));  
60.     currentDoc.layers[0].name = currentDoc.name;  
61.       
62.     for (var i = 1;i < seq_file.length; i++) {  
63.         fileToLayer(seq_file[i], currentDoc);  
64.     }  
65.     delName_str();  
66.     alert("序列导入成功!");  
67. };  
68.   
69. function delName_str() {  
70.     for (i=0; i<app.activeDocument.layers.length;i++)  
71.     {  
72.         var layerName = app.activeDocument.layers[i].name;  
73.         app.activeDocument.layers[i].name = layerName.substring(0,layerName.length-4);  
74.     }  
75. }  
76.   
77. exportSelectPath_bt.onClick = function()  
78. {  
79.     var sourceFolder = Folder(exportImagePath_ed.text);  
80.     var selectPath = sourceFolder.selectDlg("请选择导入的序列所在文件夹");  
81.     exportImagePath_ed.text = selectPath;  
82. };  
83.   
84. exportImage_bt.onClick = function()  
85. {  
86.     displayAll();  
87.     if (exportImagePath_ed.text != null) {  
88.         for (i=0; i<app.activeDocument.layers.length;i++)  
89.         {  
90.             app.activeDocument.layers[i].visible = true;  
91.             saveFile = new File(exportImagePath_ed.text+'/'+app.activeDocument.layers[i].name+ '.');  
92.             //SavePNG(saveFile, 9);  
93.             //SaveJPEG(saveFile, 8);  
94.             SaveImage();  
95.             app.activeDocument.layers[i].visible = false;  
96.         }  
97.     }  
98.     //alert(typeof(format_li.selection));  
99.     //alert(typeof(format_li.selection.toString()));  
100.     alert("每层导出成功!");  
101. };  
102.   
103. function SaveImage() {  
104.     if (format_li.selection.toString() == 'png') {  
105.         SavePNG(saveFile, 9);  
106.     }  
107.     if (format_li.selection.toString() == 'jpg') {  
108.         SaveJPEG(saveFile, 8);  
109.     }  
110. }  
111.   
112. //open file,rename layer, copy layer to newDoc.layer  
113. function fileToLayer(input_file_path, newDoc) {  
114.     var file_path = new File(input_file_path);  
115.     var doc_temp = open (file_path);  
116.     doc_temp.layers[0].name = doc_temp.name;  
117.     doc_temp.layers[0].duplicate(newDoc, ElementPlacement.INSIDE);  
118.     doc_temp.close (SaveOptions.DONOTSAVECHANGES);  
119. }  
120.   
121. function SavePNG(saveFile, compressionValue) {  
122.     pngSaveOptions = new PNGSaveOptions();  
123.     pngSaveOptions.compression = compressionValue;//0-9  
124.     pngSaveOptions.interlaced = false;  
125.     activeDocument.saveAs(saveFile, pngSaveOptions, true,Extension.LOWERCASE);  
126. }  
127.   
128. function SaveJPEG(saveFile, jpegQuality) {  
129.     jpgSaveOptions = new JPEGSaveOptions();  
130.     jpgSaveOptions.embedColorProfile = true;  
131.     jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;  
132.     jpgSaveOptions.matte = MatteType.NONE;  
133.     jpgSaveOptions.quality = jpegQuality; //1-12  
134.     activeDocument.saveAs(saveFile, jpgSaveOptions, true,Extension.LOWERCASE);  
135. }  
136.   
137. function displayAll() {  
138.     for (i=0; i<app.activeDocument.layers.length;i++)  
139.     {  
140.         app.activeDocument.layers[i].visible = false;  
141.     }  
142. }  
143.   
144. function cut_image_BasePixel() {  
145.     // init bounds object  
146.     var min_x = app.activeDocument.layers[0].bounds[0];  
147.     var min_y = app.activeDocument.layers[0].bounds[1];  
148.     var max_x = app.activeDocument.layers[0].bounds[2];  
149.     var max_y = app.activeDocument.layers[0].bounds[3];  
150.   
151.     for ( i=0; i<app.activeDocument.layers.length; i++ )  
152.     {  
153.         if ( app.activeDocument.layers[i].bounds[0] < min_x ) {  
154.             min_x = app.activeDocument.layers[i].bounds[0];  
155.         }  
156.         if ( app.activeDocument.layers[i].bounds[1] < min_y ) {  
157.             min_y = app.activeDocument.layers[i].bounds[1];  
158.         }  
159.         if ( app.activeDocument.layers[i].bounds[2] > max_x ) {  
160.             max_x = app.activeDocument.layers[i].bounds[2];  
161.         }  
162.         if ( app.activeDocument.layers[i].bounds[3] > max_y ) {  
163.             max_y = app.activeDocument.layers[i].bounds[3];  
164.         }  
165.     }  
166.     // 临界条件  
167.     if ( min_x <= 0) { min_x = 0; }  
168.     if ( min_y <= 0) { min_y = 0; }  
169.     if ( max_x <= 0) { max_x = 0; }  
170.     if ( max_y <= 0) { max_y = 0; }  
171.     if ( min_x >= app.activeDocument.width) { min_x = app.activeDocument.width; }  
172.     if ( min_y >= app.activeDocument.height) { min_y = app.activeDocument.height; }  
173.     if ( max_x >= app.activeDocument.width) { max_x = app.activeDocument.width; }  
174.     if ( max_y >= app.activeDocument.height) { max_y = app.activeDocument.height; }  
175.   
176.     //alert(min_x+'\n'+min_y+'\n'+max_x+'\n'+max_y);  
177.   
178.     //打组,求组的bounds  
179.     //合并图层求bounds  
180.     //前面取最小坐标,后面取最大坐标,如果坐标小于0则取0,如果坐标大于画布就取画布大小  
181.     app.activeDocument.crop([min_x,min_y,max_x,max_y], 0);  
182. }  
183.   
184. win.center();  
185. win.show();

 

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注常用软件Photoshop频道!


本文由 @Vivian 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程