453 lines
14 KiB
JavaScript
453 lines
14 KiB
JavaScript
|
||
//PS智能对象换图
|
||
|
||
function 模特换衣功能(){
|
||
|
||
|
||
var dialog = new Window("dialog");
|
||
dialog.text = "模特批量替换";
|
||
dialog.preferredSize.width = 400;
|
||
dialog.preferredSize.height = 150;
|
||
dialog.orientation = "column";
|
||
dialog.alignChildren = ["center","top"];
|
||
dialog.spacing = 10;
|
||
dialog.margins = 16;
|
||
|
||
// GROUP1
|
||
// ======
|
||
var group1 = dialog.add("group");
|
||
group1.orientation = "row";
|
||
group1.alignChildren = ["left","center"];
|
||
group1.spacing = 10;
|
||
group1.margins = 0;
|
||
|
||
var statictext1 = group1.add("statictext");
|
||
statictext1.text = "模板文件";
|
||
statictext1.justify = "center";
|
||
|
||
var edittext1 = group1.add("edittext");
|
||
edittext1.preferredSize.width = 250;
|
||
|
||
var button1 = group1.add("button");
|
||
button1.text = "选择文件";
|
||
button1.justify = "center";
|
||
|
||
// GROUP2
|
||
// ======
|
||
var group2 = dialog.add("group");
|
||
group2.orientation = "row";
|
||
group2.alignChildren = ["left","center"];
|
||
group2.spacing = 10;
|
||
group2.margins = 0;
|
||
|
||
var statictext2 = group2.add("statictext");
|
||
statictext2.text = "素材目录";
|
||
statictext2.justify = "center";
|
||
|
||
var edittext2 = group2.add("edittext");
|
||
edittext2.preferredSize.width = 250;
|
||
|
||
var button2 = group2.add("button");
|
||
button2.text = "选择目录";
|
||
button2.justify = "center";
|
||
|
||
// GROUP3
|
||
// ======
|
||
var group3 = dialog.add("group");
|
||
group3.orientation = "row";
|
||
group3.alignChildren = ["left","center"];
|
||
group3.spacing = 10;
|
||
group3.margins = 0;
|
||
|
||
var statictext3 = group3.add("statictext");
|
||
statictext3.text = "导出目录";
|
||
statictext3.justify = "center";
|
||
|
||
var edittext3 = group3.add("edittext");
|
||
edittext3.preferredSize.width = 250;
|
||
|
||
var button3 = group3.add("button");
|
||
button3.text = "选择目录";
|
||
button3.justify = "center";
|
||
|
||
|
||
var group5 = dialog.add("group");
|
||
var cbox1 = group5.add("checkbox");
|
||
cbox1.text = "是否遍历子文件夹素材";
|
||
cbox1.value = true;
|
||
|
||
var cbox2 = group5.add("checkbox");
|
||
cbox2.text = "是否保存文件结构";
|
||
cbox2.value = true;
|
||
|
||
var cbox3 = group5.add("checkbox");
|
||
cbox3.text = "切片导出";
|
||
cbox3.value = false;
|
||
|
||
// GROUP4
|
||
// ======
|
||
var group4 = dialog.add("group");
|
||
group4.orientation = "row";
|
||
group4.alignChildren = ["left","center"];
|
||
group4.spacing = 10;
|
||
group4.margins = 0;
|
||
|
||
var button4 = group4.add("button");
|
||
button4.text = "执行";
|
||
button4.justify = "center";
|
||
|
||
var button5 = group4.add("button");
|
||
button5.text = "退出";
|
||
button5.justify = "center";
|
||
|
||
|
||
|
||
//~ sPath = decodeURI(File($.fileName).path);
|
||
//~ edittext1.text = sPath + "/模板/笨鸟跨境 圣诞袜模板 单边 加大-38.psd";
|
||
//~ edittext2.text = sPath + "/替换图片子文件夹";
|
||
//~ edittext3.text = sPath + "/导出目录";
|
||
|
||
|
||
|
||
button1.onClick = function()
|
||
{
|
||
|
||
var inputFile= app.openDialog();
|
||
if (inputFile != null)
|
||
{
|
||
edittext1.text = decodeURI(inputFile);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
button2.onClick = function()
|
||
{
|
||
|
||
var inputFolder = Folder.selectDialog("请选择素材目录:");
|
||
if (inputFolder != null)
|
||
{
|
||
edittext2.text = decodeURI(inputFolder);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
button3.onClick = function()
|
||
{
|
||
|
||
var inputFolder = Folder.selectDialog("请选择导出目录:");
|
||
if (inputFolder != null)
|
||
{
|
||
edittext3.text = decodeURI(inputFolder);
|
||
}
|
||
|
||
}
|
||
|
||
button4.onClick = function()
|
||
{
|
||
模板路径 = edittext1.text;
|
||
素材目录 = edittext2.text;
|
||
导出目录 = edittext3.text;
|
||
main(模板路径,素材目录,导出目录);
|
||
}
|
||
|
||
button5.onClick = function()
|
||
{
|
||
|
||
dialog.close();
|
||
}
|
||
|
||
|
||
function main(模板路径,素材目录,导出目录)
|
||
{
|
||
|
||
|
||
if(Folder(导出目录).exists==false){Folder(导出目录).create();}
|
||
|
||
var doc = app.open(File(模板路径));
|
||
//~ 素材文件列表 = Folder(素材目录).getFiles("*.psd");
|
||
|
||
isSubFolders = cbox1.value;
|
||
素材文件列表 = 遍历目录指定类型文件(素材目录,isSubFolders);
|
||
|
||
|
||
alert("当前目录一共有"+素材文件列表.length+"个素材。","提示:");
|
||
|
||
try
|
||
{
|
||
lay_替换对象图层名 = "替换对象";
|
||
lay_替换对象 = app.activeDocument.artLayers.getByName(lay_替换对象图层名);
|
||
}
|
||
catch(e)
|
||
{
|
||
alert("未找到["+lay_替换对象图层名+"]智能对象图层!","提示:");
|
||
}
|
||
|
||
app.activeDocument.activeLayer = lay_替换对象;
|
||
|
||
for(var i=0;i<素材文件列表.length;i++)
|
||
{
|
||
scpsd_path = 素材文件列表[i];
|
||
//~ lay_替换对象.visible = false;
|
||
|
||
素材名 = decodeURI(File(scpsd_path).name.replace(/(?:\.[^.]*$|$)/, ''));
|
||
|
||
//替换内容
|
||
var d = new ActionDescriptor();
|
||
d.putPath(stringIDToTypeID("null"), new File(scpsd_path));
|
||
executeAction(stringIDToTypeID("placedLayerReplaceContents"), d, DialogModes.NO);
|
||
|
||
if(cbox2.value) //保持结构
|
||
{
|
||
结构导出目录 = 导出目录+"\\" + getRelativePath(decodeURI(File(scpsd_path).path), 素材目录);
|
||
|
||
if(Folder(结构导出目录).exists==false){Folder(结构导出目录).create();}
|
||
|
||
保存路径 = 结构导出目录+"\\"+素材名+".jpg";
|
||
$.writeln(保存路径);
|
||
|
||
if(cbox3.value) //按切片
|
||
{
|
||
//~ 按切片导出图片(结构导出目录,app.activeDocument.name.replace(/(?:\.[^.]*$|$)/, ''));
|
||
按切片导出图片(结构导出目录,素材名);
|
||
}
|
||
else
|
||
{
|
||
保存JPG(保存路径);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(cbox3.value) //按切片
|
||
{
|
||
//~ 按切片导出图片(导出目录,app.activeDocument.name.replace(/(?:\.[^.]*$|$)/, ''));
|
||
按切片导出图片(导出目录,素材名);
|
||
}
|
||
else
|
||
{
|
||
保存JPG(导出目录+"\\"+素材名+".jpg");
|
||
}
|
||
|
||
|
||
}
|
||
|
||
|
||
}
|
||
|
||
doc.close(SaveOptions.DONOTSAVECHANGES);
|
||
alert("处理完成!","提示:");
|
||
}
|
||
|
||
|
||
|
||
function getRelativePath(targetPath, basePath)
|
||
{
|
||
var targetFile = new File(targetPath);
|
||
var baseFolder = new Folder(basePath);
|
||
|
||
var relativePath = targetFile.getRelativeURI(baseFolder);
|
||
|
||
return decodeURI(relativePath); // 解码 URI 编码的路径
|
||
}
|
||
|
||
|
||
|
||
|
||
function 保存JPG(jpg_save_path)
|
||
{
|
||
// 以JPEG格式保存输出
|
||
var jpegOptions = new JPEGSaveOptions();
|
||
// 将jpeg质量设置得很低,使文件很小
|
||
jpegOptions.quality = 12;
|
||
|
||
app.activeDocument.saveAs(new File(jpg_save_path), jpegOptions,true);
|
||
}
|
||
|
||
|
||
function 遍历目录指定类型文件(inputFolder,isSubFolders)
|
||
{
|
||
if(isSubFolders==undefined)
|
||
{
|
||
isSubFolders = true;
|
||
}
|
||
|
||
all_files_list = [];
|
||
if (inputFolder != null) {
|
||
|
||
filesArray = scanFolder(inputFolder);
|
||
|
||
if (filesArray.length > 0)
|
||
{
|
||
for (i = 0;i<filesArray.length;i++)
|
||
{
|
||
all_files_list.push(filesArray[i]);
|
||
}
|
||
}
|
||
}
|
||
|
||
return all_files_list;
|
||
|
||
function scanFolder(folder)
|
||
{
|
||
|
||
var filesArray = [],
|
||
|
||
fileList = Folder(folder).getFiles();
|
||
var file;
|
||
|
||
|
||
|
||
for (var i = 0; i < fileList.length; i++) {
|
||
|
||
file = fileList[i];
|
||
|
||
if (file instanceof Folder)
|
||
{
|
||
if(isSubFolders==false)
|
||
{
|
||
continue;
|
||
}
|
||
else
|
||
{
|
||
filesArray = filesArray.concat(scanFolder(file));
|
||
}
|
||
|
||
}
|
||
else if (file instanceof File && file.name.match(/\.(jpg|tif|psd|png|)$/i))
|
||
{
|
||
|
||
filesArray.push(file);
|
||
|
||
}
|
||
|
||
}
|
||
|
||
return filesArray;
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
function 按切片导出图片(保存路径,替换词)
|
||
{
|
||
//~ alert(保存路径);
|
||
var d = new ActionDescriptor();
|
||
var d1 = new ActionDescriptor();
|
||
d1.putEnumerated(charIDToTypeID("Op "), charIDToTypeID("SWOp"), charIDToTypeID("OpSa"));
|
||
d1.putBoolean(charIDToTypeID("DIDr"), true);
|
||
|
||
d1.putPath(stringIDToTypeID("in"), new File(保存路径));
|
||
|
||
d1.putString(charIDToTypeID("ovFN"), 替换词+".jpg");
|
||
|
||
|
||
d1.putEnumerated(stringIDToTypeID("format"), charIDToTypeID("IRFm"), stringIDToTypeID("JPEG"));
|
||
d1.putBoolean(charIDToTypeID("Intr"), false);
|
||
d1.putInteger(stringIDToTypeID("quality"), 80);
|
||
d1.putInteger(charIDToTypeID("QChS"), 0);
|
||
d1.putInteger(charIDToTypeID("QCUI"), 0);
|
||
d1.putBoolean(charIDToTypeID("QChT"), false);
|
||
d1.putBoolean(charIDToTypeID("QChV"), false);
|
||
d1.putBoolean(stringIDToTypeID("optimized"), true);
|
||
d1.putInteger(charIDToTypeID("Pass"), 1);
|
||
d1.putDouble(stringIDToTypeID("blur"), 0);
|
||
d1.putBoolean(charIDToTypeID("Mtt "), true);
|
||
d1.putBoolean(charIDToTypeID("EICC"), false);
|
||
d1.putInteger(charIDToTypeID("MttR"), 255);
|
||
d1.putInteger(charIDToTypeID("MttG"), 255);
|
||
d1.putInteger(charIDToTypeID("MttB"), 255);
|
||
d1.putBoolean(charIDToTypeID("SHTM"), false);
|
||
d1.putBoolean(charIDToTypeID("SImg"), true);
|
||
d1.putEnumerated(charIDToTypeID("SWsl"), charIDToTypeID("STsl"), charIDToTypeID("SLAl"));
|
||
d1.putEnumerated(charIDToTypeID("SWch"), charIDToTypeID("STch"), charIDToTypeID("CHDc"));
|
||
d1.putEnumerated(charIDToTypeID("SWmd"), charIDToTypeID("STmd"), charIDToTypeID("MDCC"));
|
||
d1.putBoolean(charIDToTypeID("ohXH"), false);
|
||
d1.putBoolean(charIDToTypeID("ohIC"), true);
|
||
d1.putBoolean(charIDToTypeID("ohAA"), true);
|
||
d1.putBoolean(charIDToTypeID("ohQA"), true);
|
||
d1.putBoolean(charIDToTypeID("ohCA"), false);
|
||
d1.putBoolean(charIDToTypeID("ohIZ"), true);
|
||
d1.putEnumerated(charIDToTypeID("ohTC"), charIDToTypeID("SToc"), charIDToTypeID("OC03"));
|
||
d1.putEnumerated(charIDToTypeID("ohAC"), charIDToTypeID("SToc"), charIDToTypeID("OC03"));
|
||
d1.putInteger(charIDToTypeID("ohIn"), -1);
|
||
d1.putEnumerated(charIDToTypeID("ohLE"), charIDToTypeID("STle"), charIDToTypeID("LE03"));
|
||
d1.putEnumerated(charIDToTypeID("ohEn"), charIDToTypeID("STen"), charIDToTypeID("EN00"));
|
||
d1.putBoolean(charIDToTypeID("olCS"), false);
|
||
d1.putEnumerated(charIDToTypeID("olEC"), charIDToTypeID("STst"), charIDToTypeID("ST00"));
|
||
d1.putEnumerated(charIDToTypeID("olWH"), charIDToTypeID("STwh"), charIDToTypeID("WH01"));
|
||
d1.putEnumerated(charIDToTypeID("olSV"), charIDToTypeID("STsp"), charIDToTypeID("SP04"));
|
||
d1.putEnumerated(charIDToTypeID("olSH"), charIDToTypeID("STsp"), charIDToTypeID("SP04"));
|
||
var list = new ActionList();
|
||
var d2 = new ActionDescriptor();
|
||
d2.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC00"));
|
||
list.putObject(charIDToTypeID("SCnc"), d2);
|
||
var d3 = new ActionDescriptor();
|
||
d3.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC19"));
|
||
list.putObject(charIDToTypeID("SCnc"), d3);
|
||
var d4 = new ActionDescriptor();
|
||
d4.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC28"));
|
||
list.putObject(charIDToTypeID("SCnc"), d4);
|
||
var d5 = new ActionDescriptor();
|
||
d5.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC24"));
|
||
list.putObject(charIDToTypeID("SCnc"), d5);
|
||
var d6 = new ActionDescriptor();
|
||
d6.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC24"));
|
||
list.putObject(charIDToTypeID("SCnc"), d6);
|
||
var d7 = new ActionDescriptor();
|
||
d7.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC24"));
|
||
list.putObject(charIDToTypeID("SCnc"), d7);
|
||
d1.putList(charIDToTypeID("olNC"), list);
|
||
d1.putBoolean(charIDToTypeID("obIA"), false);
|
||
d1.putString(charIDToTypeID("obIP"), "");
|
||
d1.putEnumerated(charIDToTypeID("obCS"), charIDToTypeID("STcs"), charIDToTypeID("CS01"));
|
||
var list1 = new ActionList();
|
||
var d8 = new ActionDescriptor();
|
||
d8.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC01"));
|
||
list1.putObject(charIDToTypeID("SCnc"), d8);
|
||
var d9 = new ActionDescriptor();
|
||
d9.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC20"));
|
||
list1.putObject(charIDToTypeID("SCnc"), d9);
|
||
var d10 = new ActionDescriptor();
|
||
d10.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC02"));
|
||
list1.putObject(charIDToTypeID("SCnc"), d10);
|
||
var d11 = new ActionDescriptor();
|
||
d11.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC19"));
|
||
list1.putObject(charIDToTypeID("SCnc"), d11);
|
||
var d12 = new ActionDescriptor();
|
||
d12.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC06"));
|
||
list1.putObject(charIDToTypeID("SCnc"), d12);
|
||
var d13 = new ActionDescriptor();
|
||
d13.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC24"));
|
||
list1.putObject(charIDToTypeID("SCnc"), d13);
|
||
var d14 = new ActionDescriptor();
|
||
d14.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC24"));
|
||
list1.putObject(charIDToTypeID("SCnc"), d14);
|
||
var d15 = new ActionDescriptor();
|
||
d15.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC24"));
|
||
list1.putObject(charIDToTypeID("SCnc"), d15);
|
||
var d16 = new ActionDescriptor();
|
||
d16.putEnumerated(charIDToTypeID("ncTp"), charIDToTypeID("STnc"), charIDToTypeID("NC22"));
|
||
list1.putObject(charIDToTypeID("SCnc"), d16);
|
||
d1.putList(charIDToTypeID("ovNC"), list1);
|
||
d1.putBoolean(charIDToTypeID("ovCM"), false);
|
||
d1.putBoolean(charIDToTypeID("ovCW"), true);
|
||
d1.putBoolean(charIDToTypeID("ovCU"), true);
|
||
d1.putBoolean(charIDToTypeID("ovSF"), true);
|
||
d1.putBoolean(charIDToTypeID("ovCB"), true);
|
||
|
||
|
||
|
||
d.putObject(stringIDToTypeID("using"), stringIDToTypeID("SaveForWeb"), d1);
|
||
executeAction(stringIDToTypeID("export"), d, DialogModes.NO);
|
||
|
||
}
|
||
|
||
|
||
|
||
dialog.show();
|
||
|
||
} |