Photoshop切图批处理脚本

//激活Photoshop,设置为活动窗口 app.bringToFront();

var PRESOLUTION=72; var startRulerUnits=app.preferences.rulerUnits; var startTypeUnits=app.preferences.typeUnits; app.preferences.rulerUnits = Units.PIXELS; app.preferences.typeUnits = TypeUnits.PIXELS;

var dialogue="dialog{\     text:'自动切图V0.1',\  group:Group{\   orientation:'column',\   alignChildren:'left',\      process:StaticText{text:'处理进度:',bounds:[0,0,300,14]},\   timeline:Progressbar{bounds:[0,0,300,10],minvalue:0,maxvalue:100}\   corrdination:Panel{\    orientation:'row',\             text:'裁剪尺寸',\             x:Group{\     orientation: 'row', \                 s: StaticText { text:'宽:' }, \                 e: EditText { preferredSize: [50, 20],text:128} ,\                 p: StaticText { text:'px' }, \             }, \             y: Group {\     orientation: 'row', \                 s: StaticText { text:'高:' }, \                 e: EditText { preferredSize: [50, 20],text:64}, \                 p: StaticText { text:'px' }, \             } ,\         }, \   fileResource:Group{\    orientation: 'row', \    buttonSelect: Button{text:'待裁剪文件', properties:{name:'open'} ,helpTip:'请选择待裁剪的文件'},\    inputText: EditText{ text:'C:/Users/wxw/Desktop/map5_5.jpg', preferredSize: [180, 20] },\   },\  },\  saveFileType:Group{\   orientation:'row', \   s:StaticText{text:' 存储类型:'},\   typeList:Group{\    jpeg:RadioButton {text:'JPEG',value:true},\    gif:RadioButton {text:'GIF'},\    png8:RadioButton {text:'PNG-8'},\    png24:RadioButton {text:'PNG-24'},\   }\  }, \  saveAsOptions:Panel{\   orientation: 'column',\   alignChildren:'left',\         text: '另存为设置', \   Quality:Group{\    orientation: 'row',  \    q: StaticText { text:'压缩质量:' }, \    e: EditText {text:'60',preferredSize: [50,20],helpTip:'范围0-100,值越大图像越好'} ,\    color: StaticText { text:'颜色:' }, \    select: DropDownList { alignment:'left', itemSize: [26,14] },\    opacity:Checkbox {text:'透明',value:true,helpTip:'包含基于颜色不透明度的透明性'},\   }, \   filePrefix:Group{\    orientation: 'row',  \    s: StaticText { text:'在文件名前添加字符:' }, \    e: EditText { preferredSize: [50,20],text:'cutCopy'} ,\    s2: StaticText { text:'勿含非法字符' , enabled:flase }, \   }, \   fileSubfix: Group {\    orientation: 'row',  \    s: StaticText { text:'在文件名后添加字符:' }, \    e: EditText { preferredSize: [50, 20] }, \    s2: StaticText { text:'勿含非法字符' , enabled:flase}, \   } ,\   fileNameType:Group{\    orientation: 'row',  \    q: StaticText { text:'输出文件命名方式:' }, \    typeList:Group{\        single:RadioButton {text:'序列化'},\        double:RadioButton {text:'双循环',value:true},\       }\   }, \   finishProcess:Group{\    orientation: 'row',  \    q: StaticText { text:'处理完成后:' }, \    c:Checkbox {text:'关闭文件',value:true},\    c2:Checkbox {text:'显示处理时间',value:true},\   }, \   saveAsFolder:Group{\    orientation: 'row', \    buttonSelect: Button {text:'另存至', properties:{name:'save'} ,helpTip:'请选择文件要保持的目录'},\    inputText: EditText  { text:'C:/Users/wxw/Desktop/cutCopys', preferredSize: [180, 20] },\   },\  },\  tips:Panel{\      orientation:'row',\   alignment:'left',\         text: '提醒', \      s:StaticText{text:'默认保存方式为直接覆盖,请注意做好备份。'},\  },\  buttons:Group{\   orientation:'row',\   alignment:'right',\         about:StaticText {text:'[关于程序]'},\   Btnok: Button { text:'确定', properties:{name:'ok'} }, \         Btncancel: Button { text:'取消', properties:{name:'cancel'} } \     }, \ }";

//初始窗口对象 var win=new Window(dialogue); //初始保存设置 var saveFileType="JPEG"; var exportOptions=new ExportOptionsSaveForWeb(); exportOptions.format=SaveDocumentType.JPEG; exportOptions.quality=60; var saveFileSubFix='jpg'; var filePrefix="",fileSubfix="";

//选择要裁剪的文件 win.group.fileResource.buttonSelect.onClick= function(){     var selectedFile=File.openDialog('选择待裁剪文件');     if(selectedFile!=null){        win.group.fileResource.inputText.text=selectedFile.fsName;     win.group.fileResource.inputText.helpTip=selectedFile.fsName.toString();     } }

//另存为目录选择 win.saveAsOptions.saveAsFolder.buttonSelect.onClick=function(){     var saveFolder=win.saveAsOptions.saveAsFolder;     var defaultFolder=saveFolder.inputText.text;  var testFolder=new Folder(defaultFolder);  if(!testFolder.exists){   defaultFolder="~";  }  var selectFolder=Folder.selectDialog("选择存储文件夹",defaultFolder);  if(selectFolder!= null ){      saveFolder.inputText.text=selectFolder.fsName;   saveFolder.inputText.helpTip=selectFolder.fsName.toString();  } }

//颜色下拉选择 var colorList=[256,128,64,32,16,8,4,2]; for(var i=0,len=colorList.length;i<len;i++){     win.saveAsOptions.Quality.select.add("item",colorList[i]); } win.saveAsOptions.Quality.select.items[0].selected=true; //对象不可用 win.saveAsOptions.Quality.color.enabled=false; win.saveAsOptions.Quality.select.enabled=false; win.saveAsOptions.Quality.opacity.enabled=false;

//选择存储格式 var saveFileTypeList=win.saveFileType.typeList;

function toggleQuality(Options){     //开启颜色选项  win.saveAsOptions.Quality.color.enabled=Options.enableColor;     win.saveAsOptions.Quality.select.enabled=Options.enableColor;     win.saveAsOptions.Quality.opacity.enabled=Options.enableColor;  //关闭压缩质量  win.saveAsOptions.Quality.q.enabled=Options.enablePack;     win.saveAsOptions.Quality.e.enabled=Options.enablePack; }

function selectFileType(target){     saveFileType=target.text;  exportOptions=new ExportOptionsSaveForWeb();     switch(saveFileType){      case 'JPEG':       toggleQuality({enableColor:false,enablePack:true});    exportOptions.format=SaveDocumentType.JPEG;             exportOptions.quality=win.saveAsOptions.Quality.e.text;    saveFileSubFix='jpg';   break;   case 'GIF':       toggleQuality({enableColor:true,enablePack:false});    exportOptions.format=SaveDocumentType.COMPUSERVEGIF;             exportOptions.colors=256;             exportOptions.transparency=win.saveAsOptions.Quality.opacity.value;    saveFileSubFix='gif';   break;   case 'PNG-8':       toggleQuality({enableColor:true,enablePack:false});    exportOptions.format=SaveDocumentType.PNG;             exportOptions.colors=256;    exportOptions.transparency=win.saveAsOptions.Quality.opacity.value;             exportOptions.PNG8=true;    saveFileSubFix='png';   break;   case 'PNG-24':       toggleQuality({enableColor:false,enablePack:false});    exportOptions.format=SaveDocumentType.PNG;    exportOptions.transparency=win.saveAsOptions.Quality.opacity.value;             exportOptions.PNG8=false;    saveFileSubFix='png';   break;  } } //绑定文件类型选择 saveFileTypeList["jpeg"].onClick=function(){selectFileType(this);} saveFileTypeList["gif"].onClick=function(){selectFileType(this);} saveFileTypeList["png8"].onClick=function(){selectFileType(this);} saveFileTypeList["png24"].onClick=function(){selectFileType(this);}

//生成裁剪的文件 function createCutCopy(h,w,width,height,fileName){     //添加一个选区     app.activeDocument.selection.select([[w*width,h*height],[(w+1)*width,h*height],[(w+1)*width,(h+1)*height],[w*width,(h+1)*height],[w*width,h*height]]);  //剪切选区     app.activeDocument.selection.cut();  //创建一个新文档     var newDoc=app.documents.add(width,height,72,fileName,NewDocumentMode.RGB,DocumentFill.TRANSPARENT);  //粘帖当前粘帖板内容     app.activeDocument.paste();  //导出web所用格式     newDoc.exportDocument(File(win.saveAsOptions.saveAsFolder.inputText.text+'/'+filePrefix+fileName+fileSubfix+'.'+saveFileSubFix),ExportType.SAVEFORWEB,exportOptions);  //关闭文件,不保存  newDoc.close(SaveOptions.DONOTSAVECHANGES); }

//处理裁剪 function cutProcess(){     //判断当前是否有文件已经打开     if(app.documents.length>1){      alert("请先关闭不需要裁剪的文件!");   return false;  }     //打开要裁剪的文件     var fileResource=File(win.group.fileResource.inputText.text);  app.open(fileResource);  //合并所有图层  app.activeDocument.flatten();  //获得文档的宽和高  var resourceWidth=app.activeDocument.width;  var resourceHeight=app.activeDocument.height;  //获得裁剪的尺寸     var cutWidth=parseInt(win.group.corrdination.x.e.text,10);     var cutHeight=parseInt(win.group.corrdination.y.e.text,10);  //获得可裁剪成的文件数  var cutXNumber=Math.ceil(resourceWidth/cutWidth);  var cutYNumber=Math.ceil(resourceHeight/cutHeight);  var cutNumber=cutXNumber*cutYNumber;  if(cutNumber>10){      var confirmCutNumber=confirm("要终止程序执行吗?\r\n生成文件比较多,\r\n可能需要很长时间处理。",undefined,"停止程序执行?");  }  if(confirmCutNumber){return false;}  //循环处理裁剪  var sum=0;  var isSingle=win.saveAsOptions.fileNameType.typeList.single.value;  var startTime=new Date().getTime(),totalTime='';  for(var y=0;y<cutYNumber;y++){      for(var x=0;x<cutXNumber;x++){       //显示处理进度    sum=y*cutXNumber+x+1;    //进度条    win.group.timeline.value=Math.round(sum/cutNumber*100);    //进度文字状态          win.group.process.text='处理进度'+Math.round(sum/cutNumber*100)+'%,';    win.group.process.text+='['+sum+'/'+cutNumber+'] ';    if(isSingle){        win.group.process.text+='文件:'+filePrefix+sum+fileSubfix+'.'+saveFileSubFix;        createCutCopy(y,x,cutWidth,cutHeight,sum);    }else{        win.group.process.text+='文件:'+filePrefix+'x'+(x+1)+'y'+(y+1)+fileSubfix+'.'+saveFileSubFix;        createCutCopy(y,x,cutWidth,cutHeight,'x'+(x+1)+'y'+(y+1));    }    if(sum>=cutNumber){        //关闭文件     if(win.saveAsOptions.finishProcess.c.value){         app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);     }     //显示处理时间     if(win.saveAsOptions.finishProcess.c2.value){         totalTime='用时:'+Math.round((new Date().getTime()-startTime)/1000)+'秒';     }        alert("裁剪完毕!"+totalTime);     //关闭对话框     win.close();    }   }  } }

//判断设定 function checkSetting(){     if(!win.group.corrdination.x.e.text||win.group.corrdination.x.e.text<1){alert("请设置宽度");return false;}  if(!win.group.corrdination.y.e.text||win.group.corrdination.y.e.text<1){alert("请设置高度");return false;}

 if(!win.group.fileResource.inputText.text){alert("请选择待裁剪文件");return false;}  if(!File(win.group.fileResource.inputText.text).exists){alert("文件不存在!");return false;}

 if(!win.saveAsOptions.saveAsFolder.inputText.text){alert("请选择存储目录");return false;}  if(!Folder(win.saveAsOptions.saveAsFolder.inputText.text).exists){alert("目录不存在!");return false;}

 if(saveFileType=="JPEG"){      if(!win.saveAsOptions.Quality.e.text){       alert("请设置压缩质量");    return false;   }   if(win.saveAsOptions.Quality.e.text<1||win.saveAsOptions.Quality.e.text>100){       alert("压缩质量参数错误!");    return false;   }  }

 //文件名前后缀  filePrefix=win.saveAsOptions.filePrefix.e.text;     fileSubfix=win.saveAsOptions.fileSubfix.e.text;  //alert(win.group.corrdination.x.e.text);  //alert("checkOk");  cutProcess(); }

//确定按钮 win.buttons.Btnok.onClick=function(){  checkSetting(); } //取消按钮 win.buttons.Btncancel.onClick=function(){  app.preferences.rulerUnits=startRulerUnits;  app.preferences.typeUnits=startTypeUnits;  this.parent.parent.close(); } //关于 win.buttons.about.onClick=function(){     alert("自动切图专用工具V1.0\r\n Power By:www.wxwdesign.com \r\n 流水涵清","About"); }

//窗口居中 win.center(); //显示窗口 win.show();

 

posted @ 2013-05-25 11:35  火腿骑士  阅读(1068)  评论(0编辑  收藏  举报