2016-03-03 73 views
0

在Photoshop CS5中,我有两组图层:“模型”和“材质”。第一个(“MODEL”)将包含简单图层(“Model Tom”,“Model Jim”,“Model Harry”...),而另一个(“MATERIAL”)将包含另一个组(而不是另一个组),而不是另一个组(另一个组) :“金属”,“木材”等 当然这些材料组会自己有其他层(“金属”将包含:“铁”,“钢”,“铜”等等,“木材”将包含“橡木” ,“樱桃”,“枫”等)。Photoshop脚本:在单独文件中导出图层组合

我想要做的是导出由每个模型与所有材料组合形成的jpg文件(质量72)。 两个图层合并成一个文件。

文件名必须与要导出的最后一个sub-MATERIAL图层相同,并且目标文件夹(应该可能在此刻创建)应该作为MODEL调用。

按照上面的例子中,你会碰到这样的:

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的。 制作类似的东西非常复杂? 你有什么建议吗? 谢谢!

回答

0

欢迎的Photoshop脚本。循环遍历图层很容易,但对于组来说变得复杂(并且可能会让人头疼),并且没有简单的索引事物的方法。

这个脚本会做你想要的(基于一个脚本来做一个更复杂的设置类似的事情)它会遍历所有的图层,并填充两个数组之一,包括阿凡达组中的所有内容,其他与背景组中的所有内容。

认沽汤姆,吉姆&哈利层被称为“化身”和所谓的“背景”组中一切小组。运行时,脚本会将文件保存到名为“output”的文件夹中。

//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(); 
} 
相关问题