用photoshop批量缩放图片

2018年9月23日 19:33

  • 用ps批处理的好处:
    • ps图像处理是非常优秀的,非普通处理程序能比。比如减小图片尺寸,在相同文件大小时,ps出来的图像比ImageMagick处理的更清晰。
    • 节约时间。很多时候,都是几百张图片要经过统一处理,输出为统一的尺寸或者格式。如果全部手工操作很容易出错,而且很浪费时间。

  • 步骤:
    • 安装ps
    • 安装 Adobe ExtentScript Tookit
    • 编写脚本
    • 点击运行,就会根据脚本内容,自动打开ps,处理图像,并保存,关闭。
  • 这里的脚本是对目录内的所有文件夹中的图像进行缩放,保存到目标文件夹,同时保留子文件夹结构。
//for photoshop 2018,只能在ps2018运行,注意Tookit编辑器里选择脚本版本。

//前几行是配置
var image_folder = Folder("E:/illustration_12");
var dest_folder = Folder ("E:/tmp/illustration_12");
var max_with = 320
var min_width=320 //如果设置为0,表示不做限制
var max_height = 0;
var min_height = 0;

function processFile(f) {
    if (f instanceof Folder) {
        var files = f.getFiles();
        for (var i = 0; i < files.length; i++) {
            processFile(files[i])
        }
    } else if (f instanceof File) {
        if (isPic(f.name)) {
            var dest = f.path.replace(image_folder.fullName, dest_folder.fullName)
            //$.writeln(dest)
            new Folder(dest).create()
            dest = dest + "/" + f.name
            if (!new File(dest).exists) {
                resizePic(f, dest, max_with)
            }
        }
    }
}

//保持比例缩放
function resizePic(file, destpath, maxw) {
    try {
        openlayer = open(file);
    }
    catch (err) {
        $.writeln(err);
        return;
    }
    // get a reference to the current (active) document and store it in a variable named "doc"
    doc = app.activeDocument;
    doc.trim()
    // $.writeln (doc.width.as ("px"))
    var px_w = doc.width.as("px") 
    var px_h = doc.height.as("px");
    var scale = limitWidthHeight(px_w,px_h);
    w = px_w * scale;
    h = px_h * scale;
    //h = (w / doc.width.as("px")) * doc.height.as("px")
    $.writeln(w)
    $.writeln(h)
    // change the color mode to RGB.  Important for resizing GIFs with indexed colors, to get better results
    doc.changeMode(ChangeMode.RGB);
    // do the resizing.  if height > width (portrait-mode) resize based on height.  otherwise, resize based on width
    if (doc.height > doc.width) {
        doc.resizeImage(null, UnitValue(h, "px"), null, ResampleMethod.BICUBIC);
    }
    else {
        doc.resizeImage(UnitValue(w, "px"), null, null, ResampleMethod.BICUBIC);
    }
    // Makes the default background white
    //var white = new SolidColor();
    // white.rgb.hexValue = "FFFFFF";
    // app.backgroundColor = white;

    // Convert the canvas size as informed above for the END RESULT
    app.activeDocument.resizeCanvas(UnitValue(w, "px"), UnitValue(h, "px"));

    // our web export options
    var options = new ExportOptionsSaveForWeb();
    //options.quality = 19 //基本清楚,最低标准,给移动网站使用
    //options.format = SaveDocumentType.JPEG;
    options.quality = 60    //PS默认值 
    options.format = SaveDocumentType.PNG;
    options.optimized = true;

    //var newName = 'web-'+doc.name+'.jpg';

    doc.exportDocument(File(destpath), ExportType.SAVEFORWEB, options);
    openlayer.close(SaveOptions.DONOTSAVECHANGES)
}

function getFileExt(filePath) {
    //获取最后一个.的位置
    var index = filePath.lastIndexOf(".");
    //获取后缀
    var ext = filePath.substr(index + 1);
    return ext
}

function isPic(fileName) {
    var ext = getFileExt(fileName)
    if ("jpg".toUpperCase() == ext.toUpperCase() ||
        "jpeg".toUpperCase() == ext.toUpperCase() ||
        "png".toUpperCase() == ext.toUpperCase()) {
        return true
    }
    return false
}

//返回限制以后的长、宽值
function limitInRange(px_w,min,max) {
    var ret = px_w;
    if(max>0) {
        if(ret>max) {
            ret = max
        }
    }
    if(min>0) {
        if(ret<min) {
            ret = min;
        }
    }
    return ret;
}

//返回缩放比例
function limitWidthHeight(px_w,px_h) {
    var w = limitInRange(px_w,min_width,max_with);
    var h = limitInRange(px_h,min_height,max_height);

    var scale_w = w/px_w;
    var scale_h = h/px_h;
    if(scale_w==1) {
        return scale_h; 
    }
    if(scale_h==1) {
        return scale_w;
    }

    return Math.min(scale_w,scale_h);
}

//这里是正式调用处理函数
processFile(image_folder)
$.writeln("处理结束");

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 3 = 6