打印

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

本主题由 wonton 于 2008-6-6 17:42 加入精华
  由于技术原因,还没能实现另存为原始格式~ 只有在不另存的时候,不改变格式。
没办法只好设置另存为 为大家网上图片常用的jpg格式了。

如果要存为其它格式,还要修改代码(反正我平时不大碰到到其它格式的尺寸缩放)
有问题,透明背景图片的储存会弹出对话框导致脚本运行终止!
发帖前请搜索,回帖前请仔细看清楼上每一层。大家的批评意见要虚心接受。有错误要积极承认。 论坛的交流气氛要和谐!内容重复和无实际意义的帖子要少发。
这个问题已经修正了,透明背景的图片也可以正常另存为jpg了
强烈支持一下楼主。谢谢
>----------我就像路边的一坨屎,那样的渺小,那样的让人厌恶----------<
来个批量从命名,怎样?
>----------我就像路边的一坨屎,那样的渺小,那样的让人厌恶----------<

TOP

回复 #35 m173 的帖子 -- 别客气,有用就好

批量更名有时间可以考虑,哈哈,不知道好不好实现。
不过批量重命名似乎有不少软件有这个功能,而且重命名本身和图片处理关系不大 ,ps甚至都不用打开图片?

说到这个,想起一点:
现在这个脚本还有一个问题就是如果批处理的文件夹里面有ps不能打开的文件,也会无法正常执行。
所以要保证文件夹里面都是图片~ 不要有诸如文本之类的文件就好。
暂时先通过不处理隐藏文件来回避这个问题,可以先把不能处理,不想处理的文件先设置为隐藏属性。

[ 本帖最后由 xiexienila 于 2008-2-23 20:18 编辑 ]

TOP

xiexienila,我给你设计了一个界面,就是把PS自带的图片处理器加强,融合你的批量修改图片尺寸的脚本。这个界面的源文件我发PM给你
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!
技术+创意+审美+细心=设计成功的法宝

TOP

  这个对话框很强,不过也好长!屏幕小一点看不到下面了

4区精简一下是否更人性化 (或者把new宽高排到一行?)
发帖前请搜索,回帖前请仔细看清楼上每一层。大家的批评意见要虚心接受。有错误要积极承认。 论坛的交流气氛要和谐!内容重复和无实际意义的帖子要少发。

TOP

忽视了这点,现在修改了下,1024×768可以看的很完美。
我调整大小的意思是2112×2816的竖向照片改成768×1024,而2816×2112的横向照片改成1024×768,自动适合横竖。


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

TOP

PS用上了脚本程序,功能更完善更强大了。支持楼主,
〓经典PS交流群〓(总)32837739;⑴29909899⑵13572327

TOP

很好很强大啊 ~~~ 收藏之~~~

TOP

怎么这么牛
www.city1982.com

TOP

ss

我下载了后加在里面点脚本>>改变尺寸>>就出现了文字出错了,请楼主教一下!Error8:Syntax error Line:1  ->#target photoshop

TOP

回复 #43 jinhongzhao 的帖子

楼上这位朋友是什么版本的 photoshop ? 我只在 cs3 版本下测试过。

实在不行,用记事本打开 jsx 文件,
把头两行语句删除了(这个好像主要是让它双击可用,其实拷贝到 ps指定目录下以后意义不大)

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

TOP

CS3其实自带批量处理功能呢,“文件 > 脚本 > 图像处理器”
lz的作为脚本研究还不错

TOP

不错
大力支持!

TOP

我的是CS8.0的

TOP

我的还是出错啊!现在错误更大了

TOP

我爱蓝色
荣誉管理团队
设计的界面很强大,似乎只能统一改为一种分辨率,如果能实现批量从命名这个脚本质量更上了一层.

[ 本帖最后由 wndao009 于 2008-2-28 17:07 编辑 ]
我行我素!

TOP

回复 #48 jinhongzhao 的帖子

不知道8.0下如何提示错误? 不好意思,已经找不到老版本的ps试验了~~

TOP

批量重命名有专门的软件BATCHRENAME PRO,可以完成,非常的强大。
技术+创意+审美+细心=设计成功的法宝

TOP

楼主是个好人!
谢谢!

TOP

  最近太忙,加上有点技术问题,不然1.2早就完成了~ 看来只有周末了

另外有负XYBLUEIDEA 同志的期望,基本还是老界面。算是功能为重了~



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

TOP

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

~~~~~~~~~~~~~~~~~~~~~~~
没做详细测试,有bug请多多反馈。
另外初步认为,cs3 以下版本可能无法正常使用(手头没有那么低的版本,没试验过)



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

TOP

复制内容到剪贴板
代码:
#target photoshop
app.bringToFront();
// 带自动判断横竖的统一宽高操作。默认是直接保存关闭,原文件要注意备份! v1.2 - 2008.2.27
// 原发:bbs.blueidea.com  - Photoshop版
var PRESOLUTION = 72;
app.preferences.rulerUnits = Units.PIXELS;
var title="批量尺寸调整 v1.2 - "
        
res ="dialog { \
text:'"+title+"直接保存并关闭',\
        group: Group{orientation: 'column',alignChildren:'left',\
                top:StaticText{text:'默认为直接覆盖保存 - 请注意选择或做好备份'},\
                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] } ,\
                                        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 { text:' 保持原图宽高比,新尺寸仅作外框限定',helpTip:'原图比例不变,调整后宽/高均小于等于输入值'} ,\
                                }, \
                b:Group{ orientation: 'row', \
                                c: Checkbox { text:' 不判断原图横竖',helpTip:'不根据原图的横竖自动对应尺寸,宽/高均以输入为准'} ,\
                                }, \
                now:Group{ orientation: 'row', \
                                c: Checkbox { text:' 对文件夹进行操作(否则处理所有目前打开的文档)'} ,\
                                }, \
                folderO:Group{ orientation: 'row', \
                                b: Button {text:'待处理文件夹', properties:{name:'open'} ,helpTip:'选择您需要处理的文件所在的文件夹'},\
                                s: EditText  { text:'', preferredSize: [180, 20] },\
                                },\
                other:Group{ orientation: 'row', \
                                c: Checkbox {text:' 启用另存'} ,\
                                g: Group {\
                                        jpeg:RadioButton {text:'JPEG'},\
                                        gif:RadioButton {text:'GIF'},\
                                        psd:RadioButton {text:'PSD'},\
                                        tiff:RadioButton {text:'TIFF'},\
                                    }\
                                }, \
                otherSet: Panel {orientation: 'column',alignChildren:'left',\
                        text: '另存设置', \
                        Quality: Group { orientation: 'row',  \
                                    c: Checkbox { text:'转换 ICC 配置',helpTip:'在储存前将 ICC 配置文件转换为 sRGB'} ,\
                                    s: StaticText { text:'压缩质量:' }, \
                                    d: DropDownList { alignment:'left', itemSize: [26, 14] },\
                                    c2:Checkbox {text:'透明',helpTip:'包含基于颜色不透明度的透明性'},\
                                    }, \
                        head: Group { orientation: 'row',  \
                                    s: StaticText { text:'在文件名前添加字符:' }, \
                                    e: EditText { preferredSize: [50, 20] } ,\
                                    s2: StaticText { text:'勿含非法字符' , enabled:flase }, \
                                    }, \
                        foot: Group { orientation: 'row',  \
                                    s: StaticText { text:'在文件名后添加字符:' }, \
                                    e: EditText { preferredSize: [50, 20] }, \
                                    s2: StaticText { text:'勿含非法字符' , enabled:flase}, \
                                    } ,\
                        otherF:Group{ orientation: 'row', \
                                    c: Checkbox { text:' 另存至其他文件夹'} ,\
                                    }, \
                        folderS:Group{ orientation: 'row', \
                                    b: Button {text:'另存至', properties:{name:'save'} ,helpTip:'选择您处理好的文件要保存至的文件夹'},\
                                    s: EditText  { text:'', preferredSize: [180, 20] },\
                                    },\
                        icc: Checkbox { text:' 储存时包含 ICC 配置文件',helpTip:'存为 GIF 格式时此选项无效'},\
                        },\
                },\
        buttons: Group { orientation: 'row', alignment: 'right',\
                s:StaticText {text:'[ABOUT]'},\
                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.buttons.s.onClick = function () {
alert(title+"\r\n首发:bbs.blueidea.com  Photoshop专栏\r\n感谢:我爱蓝色、蛋蛋、clz8206、洛辰妃子");
}
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() {
        var defaultFolder = folderOpen.s.text;
        var testFolder = new Folder(defaultFolder);
        if (!testFolder.exists) {
            defaultFolder = "~";
        }
        var selFolder = Folder.selectDialog("选择待处理文件夹", defaultFolder);
        if ( selFolder != null ) {
            folderOpen.s.text = selFolder.fsName;
            folderOpen.s.helpTip = selFolder.fsName.toString();
        }
}
folderSave.b.onClick = function() {
        var defaultFolder = folderSave.s.text;
        var testFolder = new Folder(defaultFolder);
        if (!testFolder.exists) {
            defaultFolder = "~";
        }
        var selFolder = Folder.selectDialog("选择要储存至的文件夹", defaultFolder);
        if ( selFolder != null ) {
            folderSave.s.text = selFolder.fsName;
            folderSave.s.helpTip = selFolder.fsName.toString();
        }
}
// 初始化选项
if (app.documents.length == 0){
    win.group.now.c.value = true;
    win.group.folderO.enabled =true;
}else{
    win.group.folderO.enabled =false;
}
win.group.other.g.enabled =false;
win.group.otherSet.enabled =false;
win.group.other.g.jpeg.value = true; //默认保存为jpg
win.group.otherSet.icc.value =true; //默认保存icc
var saveType = "jpeg";
win.group.otherSet.Quality.c2.hide(); //隐藏第二选框
for (i=0;i<13;i++){ //初始化jpeg质量下拉
    win.group.otherSet.Quality.d.add("item", i );
}
win.group.otherSet.Quality.d.items[7].selected=true;
win.group.otherSet.Quality.d.helpTip ='JPEG 压缩质量 (值越大压缩后质量越高)';
//操作文件夹开关
win.group.now.c.onClick =function(){
    if (win.group.folderO.enabled) {
        win.group.folderO.enabled =false;
        }else{
        win.group.folderO.enabled =true;
        }
}
//另存开关
win.group.other.c.onClick =function(){
    if (win.group.otherSet.enabled) {
        win.group.other.g.enabled =false;
        win.group.otherSet.enabled =false;
        win.text=title+'直接保存并关闭';
        }else{
        win.group.other.g.enabled = true;
        win.group.otherSet.enabled =true;
        win.text=title+'另存为并关闭';
        if (!win.group.otherSet.otherF.c.value) {win.group.otherSet.folderS.enabled =false}
        }
}
//另存至文件夹开关
win.group.otherSet.otherF.c.onClick =function(){
    if (win.group.otherSet.folderS.enabled) {
        win.group.otherSet.folderS.enabled =false;        
        }else{
        win.group.otherSet.folderS.enabled =true;        
        }
}
//格式选项转换
win.group.other.g.jpeg.onClick =function() {
    changeType("jpeg");}
win.group.other.g.gif.onClick =function() {
    changeType("gif");}
win.group.other.g.psd.onClick =function() {
    changeType("psd");}
win.group.other.g.tiff.onClick =function() {
    changeType("tiff");}
//格式选项控制
function changeType(type){
    saveType=type;
    var don=win.group.otherSet.Quality;
        switch (type) {
        case "jpeg" :            
            don.c.text ='转换 ICC 配置' ;
            don.c.helpTip ='在储存前将 ICC 配置文件转换为 sRGB'
            don.c.value =false;
            don.s.text ='压缩质量:';
            don.d.helpTip ='JPEG 压缩质量 (值越大压缩后质量越高)';
            don.d.removeAll();
            for (i=0;i<13;i++){
                don.d.add("item", i );
            }
            don.d.items[7].selected=true;
            don.s.show();            
            don.d.show();
            don.c2.hide();
            win.text=title+'另存为 JPG 格式';
            break;
        case "gif" :
            don.c.text ='启用扩散仿色' ;
            don.c.helpTip ='储存为 GIF 格式时使用扩散防色算法'
            don.c.value =true;
            don.s.text ='颜色位数:';
            don.d.helpTip ='GIF 颜色位数 (值越大压缩后质量越高)';
            don.d.removeAll();
            for (i=2;i<257;i=i*2){
                don.d.add("item",i);
            }
            don.d.items[7].selected=true;
            don.c2.value =true;        
            don.s.show();
            don.d.show();
            don.c2.show();            
            win.text=title+'另存为 GIF 格式';
            break;
        case "psd" :
            don.c.text  ='最大兼容' ;
            don.c.helpTip ='储存为 PSD 格式是实现最大兼容'
            don.c.value =true;
            don.s.hide();
            don.d.hide();
            don.c2.hide();
            win.text=title+'另存为 PSD 格式';
            break;
        case "tiff" :
            don.c.text  ='LZW压缩' ;
            don.c.helpTip ='用 TIFF 格式储存时使用 LZW 压缩'
            don.c.value =false;
            don.s.hide();
            don.d.hide();
            don.c2.hide();
            win.text=title+'另存为 TIFF 格式';
        }
    win.reload();
}
// 实际处理开始
function newsize(docRef,a,b,x,y){ //改变图象尺寸函数
            var PW=x;
            var PH=y;    
            if (x<1 || y<1) b=true; //有一个值空缺的时候,不判断横竖            
            if (!b && x<y){  //确保PW>=PH
                PW=y;
                PH=x;
                }    
            
            var dw = docRef.width;
            var dh = docRef.height;
            var fw = PW;
            var fh = PH;
            
            if(!b && dh>dw){
                fw = PH;
                fh = PW;
            }
        
            if (x<1) fw=dw; //尺寸小于1则为 不做改变
            if (y<1) fh=dh;
        
            if(a){
                w1 =dw/fw;
                h1 =dh/fh;                    
                if(w1>h1){
                    fh =dh/w1;    
                }else{
                    fw =dw/h1;
                }            
                if (x<1 && y>=1) {fw=dw/h1;fh=y;} //有1个值不做限定的情况
                if (y<1 && x>=1) {fh =dh/w1;fw=x;}
            }
    docRef.resizeImage(fw, fh, PRESOLUTION, ResampleMethod.BICUBIC);
}
function save(docRef) {    //储存函数
        if (win.group.other.c.value){ //判断是否另存
            var don=win.group.otherSet.Quality;
            var inEmbedICC=win.group.otherSet.icc.value;
            var saveOptions;
            switch (saveType) {
                case "jpeg" :
                            docRef.flatten() ;//合并图层,以储存jpg                            
                            docRef.changeMode(ChangeMode.RGB); // 更改为rgb模式,避免其它模式无法储存
                            docRef.bitsPerChannel = BitsPerChannelType.EIGHT;
                            saveOptions = new JPEGSaveOptions();
                            saveOptions.quality = don.d.selection.index; //获取压缩质量
                            if (don.c.value) {
                                docRef.convertProfile("sRGB IEC61966-2.1", Intent.RELATIVECOLORIMETRIC, true, true);
                                }
                            saveOptions.embedColorProfile = inEmbedICC;
                            var typeName="jpg"; //定义后缀
                            break;
                case "gif" :
                            docRef.changeMode(ChangeMode.RGB);
                            saveOptions = new GIFSaveOptions();
                            saveOptions.colors = don.d.selection.index;
                            if (don.c.value){
                                saveOptions.dither = Dither.DIFFUSION; //扩散仿色        
                                }else{
                                saveOptions.dither = Dither.NONE;    
                                } ;
                            if (don.c2.value) {
                                saveOptions.transparency=1;
                                }else{
                                saveOptions.transparency=0;
                                };
                            //saveOptions.matte = MatteType.NONE; //杂边无,否则为白色
                            saveOptions.interlaced = 0; //不交错
                            var typeName="gif";
                            break;
                case "psd" :
                            saveOptions = new PhotoshopSaveOptions();
                            saveOptions.embedColorProfile = inEmbedICC;                            
                            var typeName="psd";
                            break;
                case "tiff" :
                            docRef.flatten() ;    
                            saveOptions = new TiffSaveOptions();
                            saveOptions.embedColorProfile = inEmbedICC;
                            if (don.c.value) {
                                saveOptions.imageCompression = TIFFEncoding.TIFFLZW;
                            } else {
                                saveOptions.imageCompression = TIFFEncoding.NONE;
                            }
                            var typeName="tif";    
                            break;
                default :
                            alert ("-_-!!! SaveType");
                }
            
                // 获取另存文件夹及前后追加字段
                var headWord = win.group.otherSet.head.e.text;
                var footWord = win.group.otherSet.foot.e.text;    
                
                if (win.group.otherSet.otherF.c.value){ //如果选中另存至文件夹
                            if (win.group.otherSet.folderS.s.text){
                                var saveFolder = win.group.otherSet.folderS.s.text+"/";    
    &