摘要:本文主要介绍了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频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号