点击这里查看原文

  • 用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("处理结束");