Scripting Photoshop脚本:导出单独文件中的图层组合
在PhotoshopCS5中,我有两组层:“模型”和“材质” 第一个(“模型”)将包含简单的层(“汤姆模型”、“吉姆模型”、“哈利模型”…),而另一个(“材料”)将包含另一组:“金属”、“木材”等。 当然,这些材料组本身也有其他层(“金属”将包含:“铁”、“钢”、“铜”等,“木材”将包含“橡木”、“樱桃”、“枫木”等) 我想做的是导出一个jpg文件(quality 72),该文件由每个模型与所有材质组合而成。 两个图层合并在一个文件中 文件名必须与要导出的最后一个子材质层相同,并且应将目标文件夹(此时可能已创建)称为模型 按照上面的示例,您将得到如下结果:Scripting Photoshop脚本:导出单独文件中的图层组合,scripting,flash-cs5,photoshop,layer,photoshop-script,Scripting,Flash Cs5,Photoshop,Layer,Photoshop Script,在PhotoshopCS5中,我有两组层:“模型”和“材质” 第一个(“模型”)将包含简单的层(“汤姆模型”、“吉姆模型”、“哈利模型”…),而另一个(“材料”)将包含另一组:“金属”、“木材”等。 当然,这些材料组本身也有其他层(“金属”将包含:“铁”、“钢”、“铜”等,“木材”将包含“橡木”、“樱桃”、“枫木”等) 我想做的是导出一个jpg文件(quality 72),该文件由每个模型与所有材质组合而成。 两个图层合并在一个文件中 文件名必须与要导出的最后一个子材质层相同,并且应将目标文件夹
MODEL TOM
-Iron.jpg
-Steel.jpg
-Copper.jpg
-Oak.jpg
-Cherry.jpg
-Maple.jpg
MODEL JIM
-Iron.jpg
-Steel.jpg
-Copper.jpg
-Oak.jpg
-Cherry.jpg
-Maple.jpg
MODEL HARRY
-Iron.jpg
-Steel.jpg
-Copper.jpg
-Oak.jpg
-Cherry.jpg
-Maple.jpg
我懂一点php和javascript。
做那样的东西很复杂吧?
你有什么建议吗?
谢谢 欢迎使用Photoshop脚本。在层上循环是很容易的,但是组会变得复杂(可能会有点头疼),并且没有简单的方法来索引事物 这个脚本会按照你想要的做(基于一个脚本,它对更复杂的设置做了类似的事情),它会在所有层上循环,并填充两个数组,一个是阿凡达组中的所有内容,另一个是背景组中的所有内容 将Tom、Jim和Harry三层放在一个名为“阿凡达”的组中,其他所有层放在一个名为“背景”的组中。运行时,脚本将把文件保存到名为“output”的文件夹中
//pref像素
app.preferences.rulerUnits=单位.PIXELS;
//调用源文档
var srcDoc=app.activeDocument;
//蔬菜
var numOfLayers=srcDoc.layers.length;
var layers=srcDoc.layers;
//分层蔬菜
var charArr=新数组();//汤姆、吉姆和哈利阿凡达
var bkgArr=新数组();//背景图像
var allLayers=新数组();
var theLayers=collectallayers(app.activeDocument,0);
//浏览角色图像层
GetLayerNameGroupsFromarray(charArr);
//浏览背景图像层
getLayerNamesInGroupsFromArray(bkgArr);
//背景人物
loopOverGroup(“背景”,BKGAR,“化身”,charArr);
函数loopOverGroup(groupname1、arr1、groupname2、arr2)
{
对于(变量i=0;i=0;m--)
{
var theLayer=父层[m];
var parentName=“背景”;
如果(theParent.typename==“LayerSet”)
{
如果(级别==1)parentName=theParent.name;
}
//将该函数应用于LayerSet;
if(theLayer.typename==“ArtLayer”)
{
//打开背景层
var layerName=theLayer.name;
if(parentName!=“Background”)
{
theLayer.visible=true;
}
//寻找背景
if(parentName==“backgrounds”)
{
bkgArr.push(parentName+“:”+theLayer.name);
theLayer.visible=false;
}
//寻找化身
if(parentName==“化身”)
{
charArr.push(parentName+“:”+theLayer.name);
theLayer.visible=false;
}
}
其他的
{
所有层.推送(层+层.名称);
收集所有图层(图层,级别+1)
}
}
}
函数复制(str)
{
//将图像复制到新文档中
如果(arguments.length==0)str=“temp”;
变量id428=charIDToTypeID(“Dplc”);
var desc92=新的ActionDescriptor();
var id429=charIDToTypeID(“空”);
var ref27=新的ActionReference();
var id430=charIDToTypeID(“Dcmn”);
变量id431=charIDToTypeID(“Ordn”);
变量id432=charIDToTypeID(“Frst”);
参考27.经点算的数据(id430、id431、id432);
描述92.参考文献(id429,参考文献27);
var id433=charIDToTypeID(“Nm”);
desc92.putString(id433,str);//名称
执行操作(id428、desc92、DialogModes.NO);
}
函数GetLayerNameGroupsFromArray(arr)
{
//浏览背景图像层
对于(变量i=0;i//pref pixels
app.preferences.rulerUnits = Units.PIXELS;
// call the source document
var srcDoc = app.activeDocument;
// vegetables
var numOfLayers = srcDoc.layers.length;
var layers = srcDoc.layers;
// group layer vegetables
var charArr = new Array(); // Tom, Jim & Harry avatars
var bkgArr = new Array(); // background images
var allLayers = new Array();
var theLayers = collectAllLayers(app.activeDocument, 0);
// go over the character image layers
getLayerNamesInGroupsFromArray(charArr);
// go over the background image layers
getLayerNamesInGroupsFromArray(bkgArr);
// Characters on backgrounds
loopOverGroup("backgrounds", bkgArr, "avatars", charArr);
function loopOverGroup(groupname1, arr1, groupname2, arr2)
{
for (var i = 0; i < arr1.length; i++)
{
var subLayer1 = arr1[i];
app.activeDocument.activeLayer = app.activeDocument.layerSets.getByName(groupname1).artLayers.getByName(subLayer1);
app.activeDocument.activeLayer.visible = true;
for (var j = 0; j < arr2.length; j++)
{
var subLayer2 = arr2[j];
// alert(subLayer2);
app.activeDocument.activeLayer = app.activeDocument.layerSets.getByName(groupname2).artLayers.getByName(subLayer2);
app.activeDocument.activeLayer.visible = true;
// Name the file
var tempName = subLayer1 + "_" + subLayer2;
duplicateIt(tempName);
activeDocument.flatten();
//create folder for it
makeDirectory("output", srcDoc.path);
// Set filePath and fileName to source path
var filePath = srcDoc.path + "/output/" + tempName + ".jpg";
myJpgQuality = 12;
// jpg file options
var jpgFile = new File(filePath);
jpgSaveOptions = new JPEGSaveOptions();
jpgSaveOptions.formatOptions = FormatOptions.OPTIMIZEDBASELINE;
jpgSaveOptions.embedColorProfile = true;
jpgSaveOptions.matte = MatteType.NONE;
jpgSaveOptions.quality = myJpgQuality;
activeDocument.saveAs(jpgFile, jpgSaveOptions, true, Extension.LOWERCASE);
// close it
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
app.activeDocument = srcDoc;
app.activeDocument.activeLayer.visible = false;
} // end loop j
}// end loop i
}
// function collect all layers
function collectAllLayers (theParent, level)
{
for (var m = theParent.layers.length - 1; m >= 0; m--)
{
var theLayer = theParent.layers[m];
var parentName = "Background";
if (theParent.typename == "LayerSet")
{
if (level == 1) parentName = theParent.name;
}
// apply the function to layersets;
if (theLayer.typename == "ArtLayer")
{
// switch the background background layer on
var layerName = theLayer.name;
if (parentName != "Background")
{
theLayer.visible = true;
}
// looking for backgrounds
if (parentName == "backgrounds")
{
bkgArr.push (parentName + ":" + theLayer.name);
theLayer.visible = false;
}
// looking for avatars
if (parentName == "avatars")
{
charArr.push (parentName + ":" + theLayer.name);
theLayer.visible = false;
}
}
else
{
allLayers.push(level + theLayer.name);
collectAllLayers(theLayer, level + 1)
}
}
}
function duplicateIt(str)
{
// duplicate image into new document
if (arguments.length == 0) str = "temp";
var id428 = charIDToTypeID( "Dplc" );
var desc92 = new ActionDescriptor();
var id429 = charIDToTypeID( "null" );
var ref27 = new ActionReference();
var id430 = charIDToTypeID( "Dcmn" );
var id431 = charIDToTypeID( "Ordn" );
var id432 = charIDToTypeID( "Frst" );
ref27.putEnumerated( id430, id431, id432 );
desc92.putReference( id429, ref27 );
var id433 = charIDToTypeID( "Nm " );
desc92.putString( id433, str ); // name
executeAction( id428, desc92, DialogModes.NO );
}
function getLayerNamesInGroupsFromArray(arr)
{
// go over the background image layers
for (var i = 0; i < arr.length; i++)
{
var temp = arr[i].toString();
var groupName = temp.substring(0, temp.indexOf(":"));
var layerName = temp.substring(temp.indexOf(":")+1, temp.length);
arr[i] = layerName;
}
return arr;
}
function makeDirectory(foldername, apath)
{
// create directory
var myDirectoryName = apath + "/" + foldername;
var myDirectory = new Folder(myDirectoryName);
if(!myDirectory.exists) myDirectory.create();
}