打印

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

本主题由 wonton 于 2008-6-6 17:42 加入精华
用于批量更改打开的图片的尺寸的photoshop 脚本 (javascript)。

v1.0版本 (旧版不提供下载了,需要的请参考下面楼层的代码段)

操作对象:
当前打开的所有文档;
(注意不要有尚未保存过的新建的文档,或无法直接保存的文档,否则会中断批处理)

用法:
把解压出来的 “改变尺寸.jsx” 文件复制到 “ps安装目录\预置\脚本” 下,重新打开ps以后就可以在~
[菜单- 文件-脚本] 里面找到 “改变尺寸”

或者解压出来,在开着ps的情况下,直接双击也可以用。



操作结果:
直接覆盖保存并关闭文档。(最好复制一个文件夹,然后再打开图片执行这个操作,不然就没有原始文件喽)

~~~~~~~~~~ 目前只在cs3中文版上测试通过

若其他ps版本有问题,或者有什么bug还请多多反馈!谢谢!
对这个没什么研究,刚学~尚苦于没有资料,更欢迎高人多多指点

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2月23日 更新内容

v1.11版本

可以把当前文档(包括未保存过的)直接修改尺寸并保存为jpg。(注意会关闭当前文档!)
可以针对整个文件夹进行操作。(程序设定为“不包括隐藏文件”,因此不想处理和不能处理的文件可以先设置为[隐藏]属性)
可选择另存jpg 至另一个文件夹。
另存时支持文件名前后添加字符。

更新在28楼 (旧版不提供下载了,需要的请参考下面楼层的代码段)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3月2日 更新内容


v1.21 更新:
1、增添了3种另存格式:gif、psd、tiff。
2、添加了处理进度条,在大量文件处理的时候对进度掌握更好。(3月2日修正了隐藏文件导致进度条不准的bug)
3、修改了改变尺寸的算法,允许对不需要控制的尺寸留空(小于1或不填写即为留空,留空值将根据选项 不改变或者等比计算)
4、添加了about ,鸣谢了几位给于帮助的朋友

更新在54楼




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3月29日 更新内容

v2.0版本下载

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

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

更新在61楼,请喜欢的朋友下载v2.0版本



[ 本帖最后由 wonton 于 2008-3-29 23:08 编辑 ]
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!
本帖最近评分记录
  • wonton 威望 +2 支持 2008-3-8 09:52
忘了说了,比较适合统一处理 有横有竖混在一起的照片

这是做这个脚本的初衷
好东西,支持~!
(\/)︵ 
(·_ _ )~GO2HERE.NET/GO2HERE.NET.CN MORE THAN MEETS THE EYE ⺌囨囚囨図〆
正有一批产品图片需要处理  哎呀 就这么遇到了   么么楼主一下  
老百姓都是猪和兔子,公务员都是鸭子 大师是乌龟!

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!

努力

学学了!!

TOP

附上代码,方便大家指正

复制内容到剪贴板
代码:
#target photoshop
app.bringToFront();
// 带自动判断横竖的统一长宽操作,对当前所有打开文档进行操作。因为是直接保存关闭,原文件要注意备份!
if (app.documents.length == 0){
    alert("请打开至少一个文件");
}else{
var PRESOLUTION = 72;
app.preferences.rulerUnits = Units.PIXELS;
        
res ="dialog { \
text:'批量尺寸调整 - 直接覆盖保存-请注意备份',\
        group: Group{orientation: 'column',alignChildren:'left',\
                corrdination: Panel { orientation: 'row', \
                        text: '需要尺寸', \
                                x: Group { orientation: 'row', \
                                        s: StaticText { text:'长:' }, \
                                        e: EditText { preferredSize: [50, 20] } ,\
                                        p: StaticText { text:'pixel' }, \
                                        }, \
                                y: Group { orientation: 'row', \
                                        s: StaticText { text:'宽:' }, \
                                        e: EditText { preferredSize: [50, 20] }, \
                                        p: StaticText { text:'pixel' }, \
                                        } \
                                },  \
                        a:Group{ orientation: 'row', \
                                c: Checkbox { preferredSize: [16, 16]} ,\
                                s: StaticText {text:'保持原图长宽比,新尺寸仅作外框限定'},\
                                }, \
                        b:Group{ orientation: 'row', \
                                c: Checkbox { preferredSize: [16, 16]} ,\
                                s: StaticText {text:'不判断原图横竖'},\
                                }, \
                },\
        buttons: Group { orientation: 'row', alignment: 'right',\
                Btnok: Button { text:'确定', properties:{name:'ok'} }, \
                Btncancel: Button { text:'取消', properties:{name:'cancel'} } \
                } \
}";
win = new Window (res);
win.buttons.Btncancel.onClick = function () {
this.parent.parent.close();
}
win.group.a.c.onClick = function(){ //如果勾选了a,则b被锁定
        if(win.group.a.c.value){
                win.group.b.c.value=true;
        }
}
win.group.b.c.onClick = function(){
        if(win.group.a.c.value){
                win.group.b.c.value=true;
        }
}
win.buttons.Btnok.onClick = function () {
    
                var x=Number(win.group.corrdination.x.e.text);
                var y=Number(win.group.corrdination.y.e.text);
                var a=win.group.a.c.value;
                var b=win.group.b.c.value; //选中则不颠倒横竖,以输入值为准
                
                if (!b && x<y){  //确保PW>=PH
                        var PW=y
                        var PH=x
                        }else{
                        var PW=x
                        var PH=y
                        }    
    while (app.documents.length){
    var docRef = app.activeDocument; // 当前活动文档为操作对象    
                var dw = docRef.width;
                var dh = docRef.height;
                var fw = PW;
                var fh = PH;
                if(!b && dh>dw){
                    fw = PH;
                    fh = PW;
                }
                if(a){
                    w1 =dw/fw;
                    h1 =dh/fh;
                    if(w1>h1){
                        fh =dh/w1;    
                    }else{
                        fw =dw/h1;
                    }
                }
        docRef.resizeImage(fw, fh, PRESOLUTION, ResampleMethod.BICUBIC);
        docRef.save();
        docRef.close(); //关闭当前文档
}
this.parent.parent.close();
}
win.center();
win.show();
}

TOP

不错   支持下  
生死簿

TOP

我汗,你怎么这么及时,春节照几百张照片各个都是3072×2304,我还正发愁如何处理呢。哈哈
web设计加群:8156919

TOP

  其实一起打开效率还是比较低的,尤其配置不好的机器~
照片方向一致的话,还是推荐大家用ps原本的“文件-脚本-图像处理器”。

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

[ 本帖最后由 xiexienila 于 2008-2-21 09:48 编辑 ]

TOP

photoshop 用到这种程度  很强 !!!

TOP

我现在每天都调好多相..楼主这个可惜我用不到...横竖太多而且颜色也得亲自调.快快来个超强的脚本吧.会自动调色和自动按横竖裁图片的吧...........哈哈.那时我就可以做着喝咖啡看着电脑调相了

TOP

  裁切和调色 都是靠人的啊,自动效果不敢想象,呵呵

TOP

一直很敬佩你哦,xiexienila

TOP

你神了


以前我是用动作来批量改大小的,结果有横有竖的,搞得好麻烦
一万年太久,只争朝夕

TOP

只用过PS里的动作,这脚本还是第一次用,厉害

TOP

CS3正版DVD中有4个PDF是介绍脚本的,全英文的,楼主你有吗,没有PM我我发给你,支持你再丰富这个脚本的内容。

还有CS3的套装还有一个ExtendScript Toolkit 2这个软件,是专门编写脚本的,里面有所有你安装的ADOBE的软件的函数库

[ 本帖最后由 XYBLUEIDEA 于 2008-2-21 16:48 编辑 ]
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!
技术+创意+审美+细心=设计成功的法宝

TOP

回复 #17 XYBLUEIDEA 的帖子

谢谢,都用到了,不过还是很吃力。

呵呵,现在正在用 ExtendScript Toolkit 2 写一个 重复执行任意动作的脚本,就快成功了,差一个快照~
函数库还不会用,没什么编程经验,对库感觉比较郁闷。我就拿工具当作带高亮显示的记事本 (浪费啊

现阶段就是连抄带改带蒙(今天居然叫我蒙对好几个写法

[ 本帖最后由 xiexienila 于 2008-2-21 16:51 编辑 ]

TOP

加油,毕竟现在也没有中文的脚本教程,孤军做战,挺难的。

要是有什么需要我帮助的,PM我,我尽我所能帮你
技术+创意+审美+细心=设计成功的法宝

TOP

很厉害啊。跟我平时用的微软的powertoys里的image resizer有点像,试试看

TOP

程序白痴*____*
xiexienila同志 谢谢你啦~
天行键,君子以自强不息
君子应该像天宇一样运行不息,即使颠沛流离,也不屈不挠;如果你是君子,接物度量要像大地一样,没有任何东西不能承载

TOP

一直很佩服你,用动作也可以吧,请问脚本与动作做这个批处理有什么不同吗,
我行我素!

TOP

自己不懂
友情支持
4WD

TOP

回复 #21 wndao009 的帖子

  动作无法执行判断和循环阿。 比如说我就常用动作处理图片尺寸,不过要先按照横竖,分拣成两个文件夹~

有了xiexienila 这个脚本,就方便了。不错
发帖前请搜索,回帖前请仔细看清楼上每一层。大家的批评意见要虚心接受。有错误要积极承认。 论坛的交流气氛要和谐!内容重复和无实际意义的帖子要少发。

TOP

photoshop 用到这种程度  很强 !!!

TOP

ACDSee有这个功能。呵呵

TOP

还好我电脑速度好凑合

不然就惨了 谢谢 共享
凡事有两面看好的一面

TOP

批量修改图片尺寸是有时会遇到的任务,以前都是用最笨的方法一张一张打开来改,现在有了好东东!
先下下来,回头用用。谢谢楼主分享。

TOP

经过几乎一天的折腾,终于完善了一点点功能

  看到还有不少朋友用得上,就想花点时间完善一下,没想到这么简单一个东西都这么累~~

http://www.ps-scripts.com/
不少东西都是从这里找到的,虽然都是些零散的关键字,但给进一步查找搜索[脚本指南]制造了条件。
并且由于[脚本指南]缺少例句,很多写法也都是这里搜索到的,另外就是猜测实验出来的。
终于感觉到学好英文是多么幸福啊~~~~~

由于可能的组合多了好多,测试也许不尽周全,希望大家发现问题及时反馈!
再次谢谢!!



(旧版本不提供下载了,需要的请参考楼下代码)

[ 本帖最后由 wonton 于 2008-3-3 17:02 编辑 ]
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!

TOP

希望帮忙修改一下一楼,说明楼上有更新!

复制内容到剪贴板
代码:
#target photoshop
app.bringToFront();
// 带自动判断横竖的统一长宽操作。默认是直接保存关闭,原文件要注意备份! v1.11 - 2008.2.23
var PRESOLUTION = 72;
app.preferences.rulerUnits = Units.PIXELS;
        
res ="dialog { \
text:'批量尺寸调整 ',\
        group: Group{orientation: 'column',alignChildren:'left',\
                top:StaticText{text:'默认为直接覆盖保存 - 请注意选择或做好备份',align:'left'},\
                corrdination: Panel { orientation: 'row', \
                        text: '需要尺寸', \
                                x: Group { orientation: 'row', \
                                        s: StaticText { text:'宽:' }, \
                                        e: EditText { preferredSize: [50, 20] } ,\
                                        p: StaticText { text:'px' }, \
                                        }, \
                                y: Group { orientation: 'row', \
                                        s: StaticText { text:'高:' }, \
                                        e: EditText { preferredSize: [50, 20] }, \
                                        p: StaticText { text:'px' }, \
                                        } ,\
                                }, \
                a:Group{ orientation: 'row', \
                                c: Checkbox { preferredSize: [16, 16]} ,\
                                s: StaticText {text:'保持原图长宽比,新尺寸仅作外框限定'},\
                                }, \
                b:Group{ orientation: 'row', \
                                c: Checkbox { preferredSize: [16, 16]} ,\
                                s: StaticText {text:'不判断原图横竖'},\
                                }, \
                now:Group{ orientation: 'row', \
                                c: Checkbox { preferredSize: [16, 16]} ,\
                                s: StaticText {text:'对文件夹进行操作(否则处理所有目前打开的文档)'},\
                                }, \
                folderO:Group{ orientation: 'row', \
                                b: Button {text:'待处理文件夹', properties:{name:'open'} ,helpTip:'选择您需要处理的文件所在的文件夹'},\
                                s: EditText  { text:'', preferredSize: [180, 20] },\
                                },\
                other:Group{ orientation: 'row', \
                                c: Checkbox { preferredSize: [16, 16]} ,\
                                s: StaticText {text:'启用另存 (jpg格式)'},\
                                }, \
                otherSet: Panel {orientation: 'column',alignChildren:'left',\
                        text: '另存设置', \
                        Quality: Group { orientation: 'row',  \
                                    s: StaticText { text:'Jpeg压缩质量:' }, \
                                    e: EditText { preferredSize: [30, 20] ,text:'7'} ,\
                                    s: StaticText { text:'(0-12,数值越大质量越高)' }, \
                                    }, \
                        head: Group { orientation: 'row',  \
                                    s: StaticText { text:'在文件名前添加字符:' }, \
                                    e: EditText { preferredSize: [50, 20] } ,\
                                    }, \
                        foot: Group { orientation: 'row',  \
                                    s: StaticText { text:'在文件名后添加字符:' }, \
                                    e: EditText { preferredSize: [50, 20] }, \
                                    } ,\
                        otherF:Group{ orientation: 'row', \
                                    c: Checkbox { preferredSize: [16, 16]} ,\
                                    s: StaticText {text:'另存至其他文件夹'},\
                                    }, \
                        folderS:Group{ orientation: 'row', \
                                    b: Button {text:'另存至', properties:{name:'save'} ,helpTip:'选择您处理好的文件要保存至的文件夹'},\
                                    s: EditText  { text:'', preferredSize: [180, 20] },\
                                    },\
                        },\
                },\
        buttons: Group { orientation: 'row', alignment: 'right',\
                Btnok: Button { text:'确定', properties:{name:'ok'} }, \
                Btncancel: Button { text:'取消', properties:{name:'cancel'} } \
                }, \
}";
win = new Window (res);
win.buttons.Btncancel.onClick = function () {
this.parent.parent.close();
}
function lock_b(){  //如果勾选了a,则b被锁定
        if(win.group.a.c.value){
                win.group.b.c.value=true;
        }
    }
win.group.a.c.onClick =function() { lock_b()};
win.group.b.c.onClick =function() { lock_b()};
// 打开文件夹的操作
var folderOpen=win.group.folderO
var folderSave=win.group.otherSet.folderS
folderOpen.b.onClick = function() {
       &