Vivian
2018-05-07
来源 :
阅读 2172
评论 0
摘要:本文主要介绍了Photoshop序列图处理工具,通过具体的解释说明,让我们从中学到Photoshop序列图处理工具的重点所在,让我们对序列图处理工具越来越熟悉,能够在以后的学习中更加快速的弄明白,便于更好的操作。
本文主要介绍了Photoshop序列图处理工具,通过具体的解释说明,让我们从中学到Photoshop序列图处理工具的重点所在,让我们对序列图处理工具越来越熟悉,能够在以后的学习中更加快速的弄明白,便于更好的操作。
先说下一下执行脚本的方法:
a、如果你习惯了专业的编程工具,搭建一套环境也很方便。本人使用的是notepad++,安装一个NppExec插件,直接按F6,如下设置并保存。

在这里我可以顺便说下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的脚本环境搭建如下设置:

b、文件->脚本->浏览找到.jsx后缀的脚本
c、把脚本放置D:\Program Files (x86)\Adobe\Adobe Photoshop CS6 (64 Bit)\Presets\Scripts路径下,这是我的路径。重启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频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号