请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

楼主: xiexienila

[作品] 批量更改图片尺寸的ps脚本 ---3月29日 更新 v2.0 - 增加水印功能 [复制链接]

xiexienila 楼主
帖子
1204
体力
1923
威望
41
发表于 2008-3-29 17:24:18 |显示全部楼层

新增添加水印功能,可是花了不少心血啊!

希望大家用得着

v2.0 更新:
1、增加了水印添加功能。
可以平铺或添加独个的水印;并可以使用ps众多的图层混合模式。
2、修正了1.2版本保存gif 格式时颜色位数错误的bug (强烈建议更新至2.0版本)

如果有朋友问:想要半透明水印怎么办?想要倾斜水印怎么办?
答:把水印文件做成半透明(保存为png或者psd 之类)和倾斜的即可,脚本界面就不另外放置参数了。




~~~~~~~~~~~~~~~~~~~~~~~~~
----顶楼已更新,wonton留


[ 本帖最后由 wonton 于 2008-3-29 23:07 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
已有 1 人评分威望 收起 理由
wonton + 2 很好很实用!

总评分: 威望 + 2   查看全部评分

西部数码顶级域名注册商39元抢注!

使用道具 举报

xiexienila 楼主
帖子
1204
体力
1923
威望
41
发表于 2008-3-29 17:26:34 |显示全部楼层

按照惯例,帖脚本文件

  1. #target photoshop
  2. app.bringToFront();

  3. // 带自动判断横竖的统一宽高操作。默认是直接保存关闭,原文件要注意备份! v2.0 - 2008.3.29
  4. // 原发:bbs.blueidea.com  - Photoshop版

  5. var nowTime=new Date();
  6. var PRESOLUTION = 72;
  7. var startRulerUnits = app.preferences.rulerUnits;
  8. var startTypeUnits = app.preferences.typeUnits;
  9. app.preferences.rulerUnits = Units.PIXELS;
  10. app.preferences.typeUnits = TypeUnits.PIXELS;
  11. var title="批量尺寸调整 v2.0 - "
  12.                
  13. res ="dialog { \
  14. text:'"+title+"直接保存并关闭',\
  15.         group: Group{orientation: 'column',alignChildren:'left',\
  16.                                 top:StaticText{text:'默认为直接覆盖保存 - 请注意选择或做好备份'},\
  17.                                 timeline:Progressbar{bounds:[0,0,300,10] , minvalue:0,maxvalue:100}\
  18.                                 corrdination: Panel { orientation: 'row', \
  19.                         text: '需要尺寸', \
  20.                                 x: Group { orientation: 'row', \
  21.                                         s: StaticText { text:'宽:' }, \
  22.                                         e: EditText { preferredSize: [50, 20] } ,\
  23.                                         p: StaticText { text:'px' }, \
  24.                                         }, \
  25.                                 y: Group { orientation: 'row', \
  26.                                         s: StaticText { text:'高:' }, \
  27.                                         e: EditText { preferredSize: [50, 20] }, \
  28.                                         p: StaticText { text:'px' }, \
  29.                                         } ,\
  30.                                 }, \
  31.                                 a:Group{ orientation: 'row', \
  32.                                                                 c: Checkbox { text:' 保持原图宽高比,新尺寸仅作外框限定',helpTip:'原图比例不变,调整后宽/高均小于等于输入值'} ,\
  33.                                                                 }, \
  34.                                 b:Group{ orientation: 'row', \
  35.                                                                 c: Checkbox { text:' 不判断原图横竖',helpTip:'不根据原图的横竖自动对应尺寸,宽/高均以输入为准'} ,\
  36.                                                                 }, \
  37.                                 now:Group{ orientation: 'row', \
  38.                                                                 c: Checkbox { text:' 对文件夹进行操作(否则处理所有目前打开的文档)'} ,\
  39.                                                                 }, \
  40.                                 folderO:Group{ orientation: 'row', \
  41.                                                                 b: Button {text:'待处理文件夹', properties:{name:'open'} ,helpTip:'选择您需要处理的文件所在的文件夹'},\
  42.                                                                 s: EditText  { text:'', preferredSize: [180, 20] },\
  43.                                                                 },\
  44.                                 shui:Group{ orientation: 'row', \
  45.                                                                 c: Checkbox { text:' 为图片添加水印'} ,\
  46.                                                                 g: Group {\
  47.                                                                                 one:RadioButton {text:'单一' ,helpTip:'只添加一个水印图,可控制添加位置'},\
  48.                                                                                 fill:RadioButton {text:'平铺' ,helpTip:'多个水印图平铺布满画面,可控制间距'},\
  49.                                                                         }\
  50.                                                                 }, \
  51.                                 shuiSet: Panel {orientation: 'row', \
  52.                         text: '水印设置', \
  53.                                                                         position:Group{ orientation: 'column',alignChildren:'left',\
  54.                                                                                                 po1:Group{ orientation: 'row',\
  55.                                                                                                         c1:Checkbox { helpTip:'以左上角为基准', preferredSize: [14, 14]} ,\
  56.                                                                                                         c2:Checkbox { helpTip:'以上中点为基准', preferredSize: [14, 14]} ,\
  57.                                                                                                         c3:Checkbox { helpTip:'以右上角为基准', preferredSize: [14, 14]} ,\
  58.                                                                                                         }, \
  59.                                                                                                 po2:Group{ orientation: 'row', \
  60.                                                                                                         c4:Checkbox { helpTip:'以左中点为基准', preferredSize: [14, 14]} ,\
  61.                                                                                                         c5:Checkbox { helpTip:'以正中心为基准', preferredSize: [14, 14]} ,\
  62.                                                                                                         c6:Checkbox { helpTip:'以右中点为基准', preferredSize: [14, 14]} ,\
  63.                                                                                                         }, \
  64.                                                                                                 po3:Group{ orientation: 'row', \
  65.                                                                                                         c7:Checkbox { helpTip:'以左下角为基准', preferredSize: [14, 14]} ,\
  66.                                                                                                         c8:Checkbox { helpTip:'以下中点为基准', preferredSize: [14, 14]} ,\
  67.                                                                                                         c9:Checkbox { helpTip:'以右下角为基准', preferredSize: [14, 14]} ,\
  68.                                                                                                         }, \
  69.                                                                         },\
  70.                                                                         other:Group{ orientation: 'column',alignChildren:'left',\
  71.                                                                                                 dis:Group{ orientation: 'row',\
  72.                                                                                                         s1: StaticText { text:'平距:'}, \
  73.                                                                                                         e1: EditText { preferredSize: [55, 20], helpTip:'距离参照点的水平距离;平铺状态下为间距(单位:像素)' } ,\
  74.                                                                                                         s2: StaticText { text:'垂距:'}, \
  75.                                                                                                         e2: EditText { preferredSize: [55, 20], helpTip:'距离参照点的垂直距离;平铺状态下为间距(单位:像素)' } ,\
  76.                                                                                                 },\
  77.                                                                                                 hun:Group{ orientation: 'row',\
  78.                                                                                                         s: StaticText { text:'混合:'}, \
  79.                                                                                                         d:DropDownList { alignment:'left', itemSize: [50,16] },\
  80.                                                                                                         s2: StaticText { text:'缩放:'}, \
  81.                                                                                                         e:EditText{ preferredSize: [38, 20], text:'1',helpTip:'水印与原始水印文件的缩放比例'},\
  82.                                                                                                 },\
  83.                                                                                                 open:Group{ orientation: 'row', \
  84.                                                                                                         b: Button {text:'选择水印文件', properties:{name:'open'} ,helpTip:'请确保文件为常用图片格式,且非gif动画'},\
  85.                                                                                                         e: EditText  { text:'', preferredSize: [86, 20] },\
  86.                                                                                                 },\
  87.                                                                         },\
  88.                                                                 },\
  89.                                 other:Group{ orientation: 'row', \
  90.                                                                 c: Checkbox {text:' 启用另存'} ,\
  91.                                                                 g: Group {\
  92.                                                                                 jpeg:RadioButton {text:'JPEG'},\
  93.                                                                                 gif:RadioButton {text:'GIF'},\
  94.                                                                                 psd:RadioButton {text:'PSD'},\
  95.                                                                                 tiff:RadioButton {text:'TIFF'},\
  96.                                                                         }\
  97.                                                                 }, \
  98.                                 otherSet: Panel {orientation: 'column',alignChildren:'left',\
  99.                         text: '另存设置', \
  100.                                                 Quality: Group { orientation: 'row',  \
  101.                                                                         c: Checkbox { text:'转换 ICC 配置',helpTip:'在储存前将 ICC 配置文件转换为 sRGB'} ,\
  102.                                                                         s: StaticText { text:'压缩质量:' }, \
  103.                                                                         d: DropDownList { alignment:'left', itemSize: [26,14] },\
  104.                                                                         c2:Checkbox {text:'透明',helpTip:'包含基于颜色不透明度的透明性'},\
  105.                                                                         }, \
  106.                                                 head: Group { orientation: 'row',  \
  107.                                                                         s: StaticText { text:'在文件名前添加字符:' }, \
  108.                                                                         e: EditText { preferredSize: [50,20] } ,\
  109.                                                                         s2: StaticText { text:'勿含非法字符' , enabled:flase }, \
  110.                                                                         }, \
  111.                                                 foot: Group { orientation: 'row',  \
  112.                                                                         s: StaticText { text:'在文件名后添加字符:' }, \
  113.                                                                         e: EditText { preferredSize: [50, 20] }, \
  114.                                                                         s2: StaticText { text:'勿含非法字符' , enabled:flase}, \
  115.                                                                         } ,\
  116.                                                 otherF:Group{ orientation: 'row', \
  117.                                                                         c: Checkbox { text:' 另存至其他文件夹'} ,\
  118.                                                                         }, \
  119.                                                 folderS:Group{ orientation: 'row', \
  120.                                                                         b: Button {text:'另存至', properties:{name:'save'} ,helpTip:'选择您处理好的文件要保存至的文件夹'},\
  121.                                                                         s: EditText  { text:'', preferredSize: [180, 20] },\
  122.                                                                         },\
  123.                                                 icc: Checkbox { text:' 储存时包含 ICC 配置文件',helpTip:'存为 GIF 格式时此选项无效'},\
  124.                                                 },\
  125.                                 },\
  126.         buttons: Group { orientation: 'row', alignment: 'right',\
  127.                 s:StaticText {text:'[ABOUT]'},\
  128.                                 Btnok: Button { text:'确定', properties:{name:'ok'} }, \
  129.                 Btncancel: Button { text:'取消', properties:{name:'cancel'} } \
  130.                 }, \
  131. }";
  132.                
  133. win = new Window (res);

  134. win.buttons.Btncancel.onClick = function () { //放弃
  135.         app.preferences.rulerUnits = startRulerUnits;
  136.         app.preferences.typeUnits = startTypeUnits;
  137.         this.parent.parent.close();
  138. }
  139. win.buttons.s.onClick = function () {
  140. alert("首发:bbs.blueidea.com  Photoshop专栏\r\n鸣谢:我爱蓝色、银子、蛋蛋、clz8206、洛辰妃子、Wonton",title+"关于");
  141. }

  142. function lock_b(){  //如果勾选了a,则b被锁定
  143.                 if(win.group.a.c.value){
  144.                                 win.group.b.c.value=true;
  145.                 }
  146.         }
  147. win.group.a.c.onClick =function() { lock_b()};
  148. win.group.b.c.onClick =function() { lock_b()};

  149. // 打开文件夹的操作
  150. var folderOpen=win.group.folderO
  151. var folderSave=win.group.otherSet.folderS

  152. folderOpen.b.onClick = function() {
  153.                 var defaultFolder = folderOpen.s.text;
  154.                 var testFolder = new Folder(defaultFolder);
  155.                 if (!testFolder.exists) {
  156.                         defaultFolder = "~";
  157.                 }
  158.                 var selFolder = Folder.selectDialog("选择待处理文件夹", defaultFolder);
  159.                 if ( selFolder != null ) {
  160.                 folderOpen.s.text = selFolder.fsName;
  161.                         folderOpen.s.helpTip = selFolder.fsName.toString();
  162.             }
  163. }
  164. folderSave.b.onClick = function() {
  165.                 var defaultFolder = folderSave.s.text;
  166.                 var testFolder = new Folder(defaultFolder);
  167.                 if (!testFolder.exists) {
  168.                         defaultFolder = "~";
  169.                 }
  170.                 var selFolder = Folder.selectDialog("选择要储存至的文件夹", defaultFolder);
  171.                 if ( selFolder != null ) {
  172.                 folderSave.s.text = selFolder.fsName;
  173.                         folderSave.s.helpTip = selFolder.fsName.toString();
  174.             }
  175. }
  176. win.group.shuiSet.other.open.b.onClick= function() //打开水印文件
  177. {
  178.     var selFile = File.saveDialog('选择水印文件');
  179.     if ( selFile != null ) {
  180.        win.group.shuiSet.other.open.e.text = selFile.fsName;
  181.     }
  182. }

  183. // 初始化选项
  184. if (app.documents.length == 0){
  185.         win.group.now.c.value = true;
  186.         win.group.folderO.enabled =true;
  187. }else{
  188.         win.group.folderO.enabled =false;
  189. }
  190. win.group.other.g.enabled =false;
  191. win.group.otherSet.enabled =false;
  192. win.group.other.g.jpeg.value = true; //默认保存为jpg
  193. win.group.otherSet.icc.value =true; //默认保存icc
  194. var saveType = "jpeg";
  195. win.group.otherSet.Quality.c2.hide(); //隐藏第二选框
  196. for (i=0;i<13;i++){ //初始化jpeg质量下拉
  197.         win.group.otherSet.Quality.d.add("item", i );
  198. }
  199. win.group.otherSet.Quality.d.items[7].selected=true;
  200. win.group.otherSet.Quality.d.helpTip ='JPEG 压缩质量 (值越大压缩后质量越高)';

  201. win.group.shuiSet.enabled =false;
  202. win.group.shui.g.enabled =false;
  203. win.group.shui.g.one.value =true; //默认一个水印
  204. win.group.shuiSet.position.po3.c9.value=true; //默认右下角

  205. var jiaShui =false; //默认不添加水印

  206. var sBlend=  new Array();
  207. sBlend[0]= "正常,NORMAL";
  208. sBlend[1]= "溶解,DISSOLVE";
  209. sBlend[2]= "变暗,DARKEN";
  210. sBlend[3]= "正片叠底,MULTIPLY";
  211. sBlend[4]= "颜色加深,COLORBURN";
  212. sBlend[5]= "线性加深,LINEARBURN";
  213. sBlend[6]= "变亮,LIGHTEN";
  214. sBlend[7]= "滤色,SCREEN";
  215. sBlend[8]= "颜色减淡,COLORDODGE";
  216. sBlend[9]= "线性减淡,LINEARDODGE";
  217. sBlend[10]= "叠加,OVERLAY";
  218. sBlend[11]= "柔光,SOFTLIGHT";
  219. sBlend[12]= "强光,HARDLIGHT";
  220. sBlend[13]= "亮光,VIVIDLIGHT";
  221. sBlend[14]= "线性光,LINEARLIGHT";
  222. sBlend[15]= "点光,PINLIGHT";
  223. sBlend[16]= "实色混合,HARDMIX";
  224. sBlend[17]= "差值,DIFFERENCE";
  225. sBlend[18]= "排除,EXCLUSION";
  226. sBlend[19]= "色相,HUE";
  227. sBlend[20]= "饱和度,SATURATION";
  228. sBlend[21]= "颜色,COLORBLEND";
  229. sBlend[22]= "明度,LUMINOSITY";
  230. //sBlend[23]= "深色,DARKERCOLOR";
  231. //sBlend[24]= "浅色,LIGHTERCOLOR";

  232. for (i=0;i<23;i++) {
  233.         win.group.shuiSet.other.hun.d.add("item",sBlend[i].substring(0,sBlend[i].indexOf(",")));
  234. }
  235. win.group.shuiSet.other.hun.d.items[0].selected=true;

  236. //操作文件夹开关
  237. win.group.now.c.onClick =function(){
  238.         if (win.group.folderO.enabled) {
  239.                 win.group.folderO.enabled =false;
  240.                 }else{
  241.                 win.group.folderO.enabled =true;
  242.                 }
  243. }
  244. //另存开关
  245. win.group.other.c.onClick =function(){
  246.         if (win.group.otherSet.enabled) {
  247.                 win.group.other.g.enabled =false;
  248.                 win.group.otherSet.enabled =false;
  249.                 win.text=title+'直接保存并关闭';
  250.                 }else{
  251.                 win.group.other.g.enabled = true;
  252.                 win.group.otherSet.enabled =true;
  253.                 win.text=title+'另存为并关闭';
  254.                 if (!win.group.otherSet.otherF.c.value) {win.group.otherSet.folderS.enabled =false}
  255.                 }
  256. }
  257. //另存至文件夹开关
  258. win.group.otherSet.otherF.c.onClick =function(){
  259.         if (win.group.otherSet.folderS.enabled) {
  260.                 win.group.otherSet.folderS.enabled =false;               
  261.                 }else{
  262.                 win.group.otherSet.folderS.enabled =true;               
  263.                 }
  264. }
  265. //水印开关
  266. win.group.shui.c.onClick =function(){
  267.         if (win.group.shui.g.enabled) {
  268.                 win.group.shui.g.enabled =false;
  269.                 win.group.shuiSet.enabled =false;
  270.                 }else{
  271.                 win.group.shui.g.enabled =true;
  272.                 win.group.shuiSet.enabled =true;
  273.                 }
  274. }
  275. //定位开关
  276. var allp=win.group.shuiSet.position;
  277. function pointClear(nowP) {                       
  278.                         allp.po1.c1.value =false;
  279.                         allp.po1.c2.value =false;
  280.                         allp.po1.c3.value =false;
  281.                         allp.po2.c4.value =false;
  282.                         allp.po2.c5.value =false;
  283.                         allp.po2.c6.value =false;
  284.                         allp.po3.c7.value =false;
  285.                         allp.po3.c8.value =false;
  286.                         allp.po3.c9.value =false;
  287.                         nowP.value =true;
  288.         }
  289. allp.po1.c1.onClick =function() {pointClear(this)}
  290. allp.po1.c2.onClick =function() {pointClear(this)}
  291. allp.po1.c3.onClick =function() {pointClear(this)}
  292. allp.po2.c4.onClick =function() {pointClear(this)}
  293. allp.po2.c5.onClick =function() {pointClear(this)}
  294. allp.po2.c6.onClick =function() {pointClear(this)}
  295. allp.po3.c7.onClick =function() {pointClear(this)}
  296. allp.po3.c8.onClick =function() {pointClear(this)}
  297. allp.po3.c9.onClick =function() {pointClear(this)}

  298. //格式选项转换
  299. win.group.other.g.jpeg.onClick =function() {
  300.         changeType("jpeg");}
  301. win.group.other.g.gif.onClick =function() {
  302.         changeType("gif");}
  303. win.group.other.g.psd.onClick =function() {
  304.         changeType("psd");}
  305. win.group.other.g.tiff.onClick =function() {
  306.         changeType("tiff");}

  307. //格式选项控制
  308. function changeType(type){
  309.         saveType=type;
  310.         var don=win.group.otherSet.Quality;
  311.                 switch (type) {
  312.                 case "jpeg" :                       
  313.                         don.c.text ='转换 ICC 配置' ;
  314.                         don.c.helpTip ='在储存前将 ICC 配置文件转换为 sRGB'
  315.                         don.c.value =false;
  316.                         don.s.text ='压缩质量:';
  317.                         don.d.helpTip ='JPEG 压缩质量 (值越大压缩后质量越高)';
  318.                         don.d.removeAll();
  319.                         for (i=0;i<13;i++){
  320.                                 don.d.add("item", i );
  321.                         }
  322.                         don.d.items[7].selected=true;
  323.                         don.s.show();                       
  324.                         don.d.show();
  325.                         don.c2.hide();
  326.                         win.text=title+'另存为 JPG 格式';
  327.                         break;
  328.                 case "gif" :
  329.                         don.c.text ='启用扩散仿色' ;
  330.                         don.c.helpTip ='储存为 GIF 格式时使用扩散防色算法'
  331.                         don.c.value =true;
  332.                         don.s.text ='颜色位数:';
  333.                         don.d.helpTip ='GIF 颜色位数 (值越大压缩后质量越高)';
  334.                         don.d.removeAll();
  335.                         for (i=2;i<257;i=i*2){
  336.                                 don.d.add("item",i);
  337.                         }
  338.                         don.d.items[7].selected=true;
  339.                         don.c2.value =true;               
  340.                         don.s.show();
  341.                         don.d.show();
  342.                         don.c2.show();                       
  343.                         win.text=title+'另存为 GIF 格式';
  344.                         break;
  345.                 case "psd" :
  346.                         don.c.text  ='最大兼容' ;
  347.                         don.c.helpTip ='储存为 PSD 格式是实现最大兼容'
  348.                         don.c.value =true;
  349.                         don.s.hide();
  350.                         don.d.hide();
  351.                         don.c2.hide();
  352.                         win.text=title+'另存为 PSD 格式';
  353.                         break;
  354.                 case "tiff" :
  355.                         don.c.text  ='LZW压缩' ;
  356.                         don.c.helpTip ='用 TIFF 格式储存时使用 LZW 压缩'
  357.                         don.c.value =false;
  358.                         don.s.hide();
  359.                         don.d.hide();
  360.                         don.c2.hide();
  361.                         win.text=title+'另存为 TIFF 格式';
  362.                 }
  363.         win.reload();
  364. }

  365. function fillPattern(name,id,opacity) {  //填充图案
  366.     var desc4 = new ActionDescriptor();
  367.     desc4.putEnumerated( charIDToTypeID( "Usng" ), charIDToTypeID( "FlCn" ), charIDToTypeID( "Ptrn" ) );
  368.         var desc5 = new ActionDescriptor();
  369.         desc5.putString( charIDToTypeID( "Nm  " ), name );
  370.         //desc5.putString(  charIDToTypeID( "Idnt" ), id );
  371.     desc4.putObject( charIDToTypeID( "Ptrn" ), charIDToTypeID( "Ptrn" ), desc5 );
  372.     desc4.putUnitDouble( charIDToTypeID( "Opct" ), charIDToTypeID( "#Prc" ), opacity );
  373.     desc4.putEnumerated( charIDToTypeID( "Md  " ), charIDToTypeID( "BlnM" ), charIDToTypeID( "Nrml" ) );
  374.         executeAction( charIDToTypeID( "Fl  " ), desc4, DialogModes.NO );
  375. };
  376. function setPattern(name) { //定义图案
  377.     var desc13 = new ActionDescriptor();
  378.         var ref7 = new ActionReference();
  379.         ref7.putClass( charIDToTypeID("Ptrn") );
  380.     desc13.putReference( charIDToTypeID("null"), ref7 );
  381.         var ref8 = new ActionReference();
  382.         ref8.putProperty( charIDToTypeID("Prpr"),charIDToTypeID("fsel") );
  383.         ref8.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
  384.     desc13.putReference( charIDToTypeID("Usng"), ref8 );
  385.     desc13.putString( charIDToTypeID("Nm  "), name );
  386. executeAction( charIDToTypeID("Mk  "), desc13, DialogModes.NO );       
  387. }
  388. function delPattern(){ //删除图案
  389.     var desc92 = new ActionDescriptor();
  390.         var ref53 = new ActionReference();
  391.         ref53.putIndex( charIDToTypeID( "Ptrn" ), 178 );
  392.     desc92.putReference( charIDToTypeID( "null" ), ref53 );
  393. executeAction( charIDToTypeID( "Dlt " ), desc92, DialogModes.NO );
  394. }

  395. // 实际处理开始
  396. function newsize(docRef,a,b,x,y){ //改变图象尺寸函数
  397.                         var PW=x;
  398.                         var PH=y;       
  399.                         if (x<1 || y<1) b=true; //有一个值空缺的时候,不判断横竖                       
  400.                         if (!b && x<y){  //确保PW>=PH
  401.                                 PW=y;
  402.                                 PH=x;
  403.                                 }       
  404.                        
  405.                         var dw = docRef.width;
  406.                         var dh = docRef.height;

  407.                         var fw = PW;
  408.                         var fh = PH;
  409.                        
  410.                         if(!b && dh>dw){
  411.                                 fw = PH;
  412.                                 fh = PW;
  413.                         }
  414.                
  415.                         if (x<1) fw=dw; //尺寸小于1则为 不做改变
  416.                         if (y<1) fh=dh;
  417.                
  418.                         if(a){
  419.                                 w1 =dw/fw;
  420.                                 h1 =dh/fh;                                       
  421.                                 if(w1>h1){
  422.                                         fh =dh/w1;       
  423.                                 }else{
  424.                                         fw =dw/h1;
  425.                                 }                       
  426.                                 if (x<1 && y>=1) {fw=dw/h1;fh=y;} //有1个值不做限定的情况
  427.                                 if (y<1 && x>=1) {fh =dh/w1;fw=x;}
  428.                         }
  429.         docRef.resizeImage(fw, fh, PRESOLUTION, ResampleMethod.BICUBIC);
  430. }
复制代码
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

xiexienila 楼主
帖子
1204
体力
1923
威望
41
发表于 2008-3-29 17:27:16 |显示全部楼层

居然太长了,接楼上的发

  1. function shui(){ //水印处理函数
  2.         if (!win.group.shuiSet.other.open.e.text) {
  3.                 alert("您没有选择水印文件");
  4.         }else{
  5.                         var shuiFlie = File(win.group.shuiSet.other.open.e.text);
  6.                         docShui= open(shuiFlie);
  7.                         docShui.changeMode(ChangeMode.RGB);
  8.                         if (docShui.layers.length>1) docShui.mergeVisibleLayers(); //合并可见层
  9.                         var shuiLayer = docShui.activeLayer;
  10.                        
  11.                         if (parseInt(shuiLayer.bounds.toString().replace(/\D/g,"")) == 0) {
  12.                                 docShui.close(SaveOptions.DONOTSAVECHANGES);
  13.                                 if(confirm("水印文件内容为空,继续操作将不会添加任何水印")) go(false);//继续操作,只是不添加水印               
  14.                         }else{
  15.                                 //拷贝水印
  16.                                 var suo=Number(win.group.shuiSet.other.hun.e.text);
  17.                                 if (!suo) suo=1; //容错
  18.                                 if (suo<0) suo=1;
  19.                                 docShui.resizeImage(docShui.width*suo,docShui.height*suo,PRESOLUTION, ResampleMethod.BICUBIC); //变换水印大小
  20.                                 var sW=Number(shuiLayer.bounds[2]-shuiLayer.bounds[0]);
  21.                                 var sH=Number(shuiLayer.bounds[3]-shuiLayer.bounds[1]);
  22.                                 docShui.selection.selectAll();
  23.                                 docShui.selection.copy();
  24.                                 docShui.close(SaveOptions.DONOTSAVECHANGES);                               
  25.                                 //新建文档定义水印为图案
  26.                                 if (win.group.shui.g.fill.value){
  27.                                         var newDR = app.documents.add(Number(win.group.shuiSet.other.dis.e1.text)+sW, Number(win.group.shuiSet.other.dis.e2.text)+sH, 72, "ShuiTu", NewDocumentMode.RGB, DocumentFill.TRANSPARENT);
  28.                                         newDR.paste();
  29.                                         newDR.selection.selectAll();
  30.                                         setPattern("BlueIdea-Script-Watermark-"+nowTime.toString());
  31.                                         newDR.close(SaveOptions.DONOTSAVECHANGES);                                       
  32.                                         newDR= null;
  33.                                         }
  34.                                 go(true,sW,sH);
  35.                         }
  36.         }
  37. }

  38. function pasteShui(nWidth,nHeight,moveX,moveY,sW,sH,sHun){ //粘贴水印及偏移or 填充
  39.         app.activeDocument.changeMode(ChangeMode.RGB);
  40.         if(win.group.shui.g.one.value){
  41.                                 switch (true) {
  42.                                         case (allp.po1.c1.value||allp.po2.c4.value||allp.po3.c7.value):
  43.                                                 NowMX=moveX-nWidth/2+sW/2;
  44.                                                 break;
  45.                                         case (allp.po1.c2.value||allp.po2.c5.value||allp.po3.c8.value):
  46.                                                 NowMX=moveX;
  47.                                                 break;
  48.                                         case (allp.po1.c3.value||allp.po2.c6.value||allp.po3.c9.value):
  49.                                                 NowMX=nWidth/2-moveX-sW/2;
  50.                                                 break;
  51.                                         default :
  52.                                                 NowMX=0;
  53.                                 }
  54.                                 switch (true) {
  55.                                         case (allp.po1.c1.value||allp.po1.c2.value||allp.po1.c3.value):
  56.                                                 NowMY=moveY-nHeight/2+sH/2;
  57.                                                 break;
  58.                                         case (allp.po2.c4.value||allp.po2.c5.value||allp.po2.c6.value):
  59.                                                 NowMY=moveY;
  60.                                                 break;
  61.                                         case (allp.po3.c7.value||allp.po3.c8.value||allp.po3.c9.value):
  62.                                                 NowMY=nHeight/2-moveY-sH/2;
  63.                                                 break;
  64.                                         default :
  65.                                                 NowMY=0;
  66.                                 }                                
  67.                                 app.activeDocument.paste();
  68.                                 app.activeDocument.activeLayer.translate (NowMX,NowMY);
  69.         }else{
  70.                         app.activeDocument.artLayers.add();
  71.                         app.activeDocument.selection.selectAll();
  72.                         fillPattern("BlueIdea-Script-Watermark-"+nowTime.toString(),"id",100);
  73.         }
  74.         app.activeDocument.activeLayer.blendMode =eval("BlendMode."+sHun);
  75. }

  76. function save(docRef) {        //储存函数
  77.                 if (win.group.other.c.value){ //判断是否另存
  78.                         var don=win.group.otherSet.Quality;
  79.                         var inEmbedICC=win.group.otherSet.icc.value;
  80.                         var saveOptions;
  81.                         switch (saveType) {
  82.                                 case "jpeg" :
  83.                                                         docRef.flatten() ;//合并图层,以储存jpg                                                       
  84.                                                         docRef.changeMode(ChangeMode.RGB); // 更改为rgb模式,避免其它模式无法储存
  85.                                                         docRef.bitsPerChannel = BitsPerChannelType.EIGHT;
  86.                                                         saveOptions = new JPEGSaveOptions();
  87.                                                         saveOptions.quality = don.d.selection.index; //获取压缩质量
  88.                                                         if (don.c.value) {
  89.                                                                 docRef.convertProfile("sRGB IEC61966-2.1", Intent.RELATIVECOLORIMETRIC, true, true);
  90.                                                                 }
  91.                                                         saveOptions.embedColorProfile = inEmbedICC;
  92.                                                         var typeName="jpg"; //定义后缀
  93.                                                         break;
  94.                                 case "gif" :
  95.                                                         if (docRef.artLayers.length>1)docRef.mergeVisibleLayers(); //合并可见层
  96.                                                         docRef.changeMode(ChangeMode.RGB);
  97.                                                         saveOptions = new GIFSaveOptions();
  98.                                                         saveOptions.colors = Math.pow(2,don.d.selection.index+1);
  99.                                                         if (don.c.value){
  100.                                                                 saveOptions.dither = Dither.DIFFUSION; //扩散仿色               
  101.                                                                 }else{
  102.                                                                 saveOptions.dither = Dither.NONE;       
  103.                                                                 } ;
  104.                                                         if (don.c2.value) {
  105.                                                                 saveOptions.transparency=1;
  106.                                                                 }else{
  107.                                                                 saveOptions.transparency=0;
  108.                                                                 };
  109.                                                         //saveOptions.matte = MatteType.NONE; //杂边无,否则为白色
  110.                                                         saveOptions.interlaced = 0; //不交错
  111.                                                         var typeName="gif";
  112.                                                         break;
  113.                                 case "psd" :
  114.                                                         saveOptions = new PhotoshopSaveOptions();
  115.                                                         saveOptions.embedColorProfile = inEmbedICC;                                                       
  116.                                                         var typeName="psd";
  117.                                                         break;
  118.                                 case "tiff" :
  119.                                                         docRef.flatten() ;       
  120.                                                         saveOptions = new TiffSaveOptions();
  121.                                                         saveOptions.embedColorProfile = inEmbedICC;
  122.                                                         if (don.c.value) {
  123.                                                                 saveOptions.imageCompression = TIFFEncoding.TIFFLZW;
  124.                                                         } else {
  125.                                                                 saveOptions.imageCompression = TIFFEncoding.NONE;
  126.                                                         }
  127.                                                         var typeName="tif";       
  128.                                                         break;
  129.                                 default :
  130.                                                         alert ("-_-!!! SaveType");
  131.                                 }
  132.                        
  133.                                 // 获取另存文件夹及前后追加字段
  134.                                 var headWord = win.group.otherSet.head.e.text;
  135.                                 var footWord = win.group.otherSet.foot.e.text;       
  136.                                
  137.                                 if (win.group.otherSet.otherF.c.value){ //如果选中另存至文件夹
  138.                                                         if (win.group.otherSet.folderS.s.text){
  139.                                                                 var saveFolder = win.group.otherSet.folderS.s.text+"/";       
  140.                                                         }else{       
  141.                                                                 var saveFolder = docRef.path+"/newsize_";  //容错,避免没有具体选择另存到那个文件夹
  142.                                                         }
  143.                                 }else{
  144.                                                         if (headWord || footWord){
  145.                                                                 var saveFolder = docRef.path+"/";
  146.                                                         }else{
  147.                                                                 var saveFolder = docRef.path+"/newsize_"; //容错,避免没有添加前后缀而保存在本文件夹
  148.                                                         }
  149.                                 }

  150.                                 if (docRef.name.lastIndexOf('.')==-1){  //根据原文件名有否后缀,判断是否去掉后缀
  151.                                                 var oldname=docRef.name;
  152.                                         }else{
  153.                                                 var oldname=docRef.name.substring(0,docRef.name.lastIndexOf('.'));
  154.                                         }
  155.                                
  156.                         docRef.saveAs(new File(saveFolder + headWord + oldname + footWord + "."+ typeName),saveOptions, true,Extension.LOWERCASE);        //设定输出文件名称                       
  157.                 }else{
  158.                         docRef.save();
  159.                 }
  160.                 docRef.close(SaveOptions.DONOTSAVECHANGES); //关闭当前文档       
  161. }

  162. function go(shuiOK,sW,sH) { //最后循环处理及关闭
  163.                 var x=Number(win.group.corrdination.x.e.text);
  164.                 var y=Number(win.group.corrdination.y.e.text);
  165.                 var a=win.group.a.c.value;
  166.                 var b=win.group.b.c.value; //选中则不颠倒横竖,以输入值为准       
  167.        
  168.                 if (saveType=="psd"){ //变更首选项
  169.                 var rememberMaximize = app.preferences.maximizeCompatibility; //psd格式最大兼容 原始选项 --记录
  170.                 var needMaximize = win.group.otherSet.Quality.c.value? QueryStateType.ALWAYS : QueryStateType.NEVER;
  171.                         if ( app.preferences.maximizeCompatibility != needMaximize ) {
  172.                                                 app.preferences.maximizeCompatibility = needMaximize;
  173.                                 }
  174.                 }               
  175.                
  176.                 if (shuiOK){ //获取水印偏移量及混合模式
  177.                 var mdis =win.group.shuiSet.other.dis;
  178.                 var moveX=Number(mdis.e1.text),moveY=Number(mdis.e2.text);
  179.                         for (i=0;i<23;i++) {
  180.                                 if (win.group.shuiSet.other.hun.d.items[i].selected==true){
  181.                                         var sHun=sBlend[i].substring(sBlend[i].indexOf(",")+1);
  182.                                         break;
  183.                                         }
  184.                         }
  185.                 }
  186.                
  187.                 if (!win.group.now.c.value) {  // 当前活动文档为操作对象       
  188.                                 var k=100/app.documents.length; //定义每个文件所占进度比例
  189.                                 while (app.documents.length){
  190.                                                 var docRef = app.activeDocument;
  191.                                                 newsize(docRef,a,b,x,y);
  192.                                                 if(shuiOK) pasteShui(Number(docRef.width),Number(docRef.height),moveX,moveY,sW,sH,sHun);
  193.                                                 save(docRef);
  194.                                                 win.group.timeline.value =win.group.timeline.value+k;
  195.                                 }
  196.                 }else{ // 文件夹为操作对象                       
  197.                                 var openFolder = Folder(win.group.folderO.s.text);                               
  198.                                 var fileList = openFolder.getFiles() //获取open文件夹下所有文件
  199.                                 var k=100/fileList.length;
  200.                                 for (i=0;i<fileList.length;i++){
  201.                                         if (fileList[i] instanceof File && fileList[i].hidden == false){ //不处理隐藏文件
  202.                                                 open(fileList[i]);
  203.                                                 var docRef = app.activeDocument;
  204.                                                 newsize(docRef,a,b,x,y);
  205.                                                 if(shuiOK) pasteShui(Number(docRef.width),Number(docRef.height),moveX,moveY,sW,sH,sHun);
  206.                                                 save(docRef);
  207.                                         }
  208.                                         win.group.timeline.value =win.group.timeline.value+k;
  209.                                 }
  210.                 }
  211.        
  212.         if ( rememberMaximize != undefined )  app.preferences.maximizeCompatibility = rememberMaximize;  //psd格式最大兼容选项还原
  213.         app.preferences.rulerUnits = startRulerUnits;
  214.         app.preferences.typeUnits = startTypeUnits;
  215.         if (shuiOK && win.group.shui.g.fill.value) delPattern(); //清除图案定义
  216.         this.parent.parent.close();

  217. }

  218. win.buttons.Btnok.onClick = function () {       
  219.                 if (win.group.shui.c.value) {
  220.                         shui(); //处理水印及最后完成
  221.                 }else{
  222.                         go(false);
  223.                 }
  224. }

  225. win.center();
  226. win.show();
复制代码

[ 本帖最后由 wonton 于 2008-3-29 23:14 编辑 ]

使用道具 举报

帖子
1
体力
12
威望
0
发表于 2008-3-30 11:24:33 |显示全部楼层
脚本这东西,好难吧?
支持!

使用道具 举报

杨宁

中级会员

帖子
127
体力
317
威望
0
居住地
江苏省 常州市
发表于 2008-3-30 14:23:11 |显示全部楼层
脚本看起来象天书,再说英文或编程我也不懂,只有鼓励的份了。

使用道具 举报

我爱蓝色

荣誉管理 手机认证 

帖子
3000
体力
14970
威望
51
居住地
广东省 广州市
发表于 2008-3-30 16:57:22 |显示全部楼层
看了下,你写这个水印函数挺辛苦的,有几十行都是水印相关的函数。
技术+创意+审美+细心=设计成功的法宝

使用道具 举报

帖子
4
体力
12
威望
0
发表于 2008-4-30 13:52:21 |显示全部楼层

完全看不懂!浮躁

使用道具 举报

色盲人

高级会员

帖子
146
体力
967
威望
0
居住地
陕西省 西安市
发表于 2008-4-30 15:26:11 |显示全部楼层
好东西,支持!
http://weibo.com/wcg8904

使用道具 举报

若即离

金牌会员

帖子
1376
体力
3796
威望
6
居住地
四川省 成都市
发表于 2008-4-30 23:02:03 |显示全部楼层
原来大家的PS已经进步到自己编代码“丰衣足食”了。学ps也是“逆水行舟,不进则退”啊。

LZ给的网站真的很不错,风格也很舒服,谢谢分享!去了才发现那个网站05年就建了,看来外国人在PS上真的比我们先进很多!而且在那里思考的深度也明显要深,不是总在问一些帮助里都能查到的简单操作(也许很多想法算法可以用代码验证,更有利思考吧)。比如这个贴子http://www.ps-scripts.com/bb/viewtopic.php?t=1662,LZ好奇jpeg保存图像对原图的损耗,就编了个程序让jpeg压缩参数为12、10和4的分别在原参数的基础上再压20遍,结果发现反复用参数为4来压了20遍的图像比参数为10的效果还要好(保真性要好)。。。

遗憾的是我的英语水平也就只够看看,想发言,还差火侯
功不唐捐

使用道具 举报

帖子
65
体力
147
威望
0
居住地
四川省 成都市
发表于 2008-4-30 23:48:50 |显示全部楼层
好东西~~支持下!

使用道具 举报

wonton 

馄饨

荣誉管理

帖子
6131
体力
15919
威望
105
居住地
浙江省 杭州市
发表于 2008-5-1 11:05:53 |显示全部楼层

回复 wangruisc 在 69# 的帖子

那个网站是不错,wangruisc 说的那个压缩的帖子也挺有意思,
据我观察12的细节保留好,缺点是引入了不必要的信息,且有一些马赛克


4则趋向模糊,高对比边缘杂点严重


10的马赛克太严重了


由于他样本图片的特性,看起来总体表现4比较好 ~

~~~~~~~~~~~~~~` 我们换一个图片看看:
原图


4


10


12


[ 本帖最后由 wonton 于 2008-5-1 13:24 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
发帖前请搜索,回帖前请仔细看清楼上每一层。大家的批评意见要虚心接受。有错误要积极承认。 论坛的交流气氛要和谐!内容重复和无实际意义的帖子要少发。

使用道具 举报

帖子
71
体力
846
威望
2
居住地
湖北省 武汉市
发表于 2008-5-15 14:12:25 |显示全部楼层
谢谢,好东西!!!

使用道具 举报

帖子
25
体力
114
威望
0
居住地
广西壮族自治区 柳州市
发表于 2008-5-23 08:42:47 |显示全部楼层
强人啊……
我是英文菜鸟……

使用道具 举报

帖子
93
体力
372
威望
0
居住地
天津市 河东区
发表于 2008-5-23 09:20:43 |显示全部楼层
我的ps 8.01,安装后怎么就永不了
报错:Error8:syntax error
     line:1

使用道具 举报

ahero 
帖子
10
体力
31
威望
0
发表于 2008-5-23 13:25:28 |显示全部楼层
高,实在是高,我佩服的五体投地!支持下楼主,太强了!确实是挺好用的东东!

使用道具 举报

狼族盟约

初级会员

帖子
48
体力
105
威望
0
居住地
广东省 广州市
发表于 2008-5-29 19:43:26 |显示全部楼层
不会啊

使用道具 举报

帖子
18
体力
49
威望
0
居住地
江苏省 苏州市
发表于 2008-5-30 11:38:51 |显示全部楼层
强!好东西啊!

使用道具 举报

帖子
9
体力
26
威望
0
居住地
山东省 德州市
发表于 2008-5-30 13:36:40 |显示全部楼层
好东西,

使用道具 举报

帖子
27
体力
73
威望
1
发表于 2008-6-4 15:24:48 |显示全部楼层
谢谢分享,学到东西了
大象无型,大音希声

使用道具 举报

帖子
1
体力
12
威望
0
发表于 2008-6-4 21:13:37 |显示全部楼层
老大你太强了,我找好苦啊,终于被我发现了,原来ps可以这样用的,谢谢了。有问题继续请教!!

使用道具 举报

青春小子

初级会员

帖子
74
体力
160
威望
0
居住地
河北省 保定市
发表于 2008-6-6 09:27:14 |显示全部楼层
功能很强大感谢楼主分享

使用道具 举报

贫僧法号净空

银牌会员 手机认证 

帖子
1322
体力
2897
威望
3
居住地
湖南省 湘潭市
发表于 2008-7-24 22:37:52 |显示全部楼层
这脚本真棒 感谢楼主

使用道具 举报

帖子
27
体力
121
威望
0
发表于 2008-8-5 14:04:18 |显示全部楼层
很好很强大,可是我的绿化版CS3脚本里的东西都会报错呢?是我不会用吗?

使用道具 举报

帖子
27
体力
121
威望
0
发表于 2008-8-5 14:13:09 |显示全部楼层
都不能用,说什么不能完成“改变尺寸”命令,因为photoshop无法找到Javascript增效工具。脚本里所有的功能都会弹出这个样的错误。大家帮帮忙,我是哪里弄错了?

使用道具 举报

帖子
7
体力
24
威望
0
居住地
广东省 汕头市
发表于 2008-9-22 09:46:35 |显示全部楼层
下载了
非常感谢楼主

使用道具 举报

qgw520 
帖子
18
体力
161
威望
0
居住地
浙江省 杭州市
发表于 2008-10-4 14:07:05 |显示全部楼层
下下来..看看再说

使用道具 举报

帖子
53
体力
668
威望
0
居住地
辽宁省 大连市
发表于 2008-10-13 14:27:24 |显示全部楼层
原帖由 xiexienila 于 2008-2-21 09:44 发表
  其实一起打开效率还是比较低的,尤其配置不好的机器~
照片方向一致的话,还是推荐大家用ps原本的“文件-脚本-图像处理器”。

有空再修改一下,今天忙 希望用过的朋友积极反馈意见!谢谢



刚照着试了一下,真的不错,很好用,现在才知道

使用道具 举报

帖子
6
体力
38
威望
0
居住地
四川省 成都市
发表于 2008-11-16 21:21:28 |显示全部楼层
很好啊,谢谢了

使用道具 举报

帖子
12
体力
67
威望
0
居住地
福建省 福州市
发表于 2009-1-4 19:24:42 |显示全部楼层
佩服楼主。。。继续努力

使用道具 举报

帖子
2
体力
10
威望
0
发表于 2009-1-9 16:24:34 |显示全部楼层
太有用了  谢谢

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-13 10:02 , Processed in 0.159324 second(s), 8 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部