Photoshop CS6 Export Nested Layers to PNG?

2019-08-15 01:18发布

I have a PSD that contains 100s of layers. Most are grouped with individual elements within the groups (nested).

How do I Export to PNG certain individual groups (with nested layers inside of them)?

I don't want to run the Export All Layers to PNG Script, just need to export individual nested groups (layers) to PNG. I've found a few other 3rd party scripts, but they export everything. Only need to export the ones I've selected.

Thanks in advance

标签: photoshop
1条回答
Emotional °昔
2楼-- · 2019-08-15 02:05

This script should do what you want. It works only when you have the group that you want selected (not a layer within that group) I've not extensively tested it and I'm assuming you don't have groups within groups (which becomes a headache)

// export png from group
srcDoc = app.activeDocument;
var allLayers = new Array();
var selectedLayer = srcDoc.activeLayer;
var theLayers = collectAllLayers(app.activeDocument, 0);
var groupName = "";

// function collect all layers
function collectAllLayers (theParent, level)
{
  for (var m = theParent.layers.length - 1; m >= 0; m--)
  {
    var theLayer = theParent.layers[m];

    // apply the function to layersets;
    if (theLayer.typename == "LayerSet")
    {
      var goCode = false;
      allLayers.push(level + theLayer.name);
      groupName = theLayer.name
      // alert(level + " " + theLayer.name)
      collectAllLayers(theLayer, level + 1)


          var subDoc = srcDoc.layers[m];
          //alert(subDoc)
          var numOfSubLayers = subDoc.layers.length;

          //alert(numOfSubLayers)
          for (var j = numOfSubLayers -1; j >= 0 ; j--)
          {

            if (subDoc.layers[j].typename == "ArtLayer")
            {
              // if the selected (active) layer is in the group
              if (theLayer == selectedLayer)
              {
                var mylayerName = subDoc.layers[j].name
                srcDoc.activeLayer = subDoc.layers[j];
                // alert("Selected: " + mylayerName + " in " + groupName)
                processLayer(mylayerName)
                //selectAllLayersInGroup(groupName)
              }
            }
          }
    }
  }
}



function processLayer(alayername)
{
  // duplicate image into new document
  // =======================================================
  var id2784 = charIDToTypeID( "Mk  " );
  var desc707 = new ActionDescriptor();
  var id2785 = charIDToTypeID( "null" );
  var ref508 = new ActionReference();
  var id2786 = charIDToTypeID( "Dcmn" );
  ref508.putClass( id2786 );
  desc707.putReference( id2785, ref508 );
  var id2787 = charIDToTypeID( "Nm  " );
  desc707.putString( id2787, alayername );
  var id2788 = charIDToTypeID( "Usng" );
  var ref509 = new ActionReference();
  var id2789 = charIDToTypeID( "Lyr " );
  var id2790 = charIDToTypeID( "Ordn" );
  var id2791 = charIDToTypeID( "Trgt" );
  ref509.putEnumerated( id2789, id2790, id2791 );
  desc707.putReference( id2788, ref509 );
  executeAction( id2784, desc707, DialogModes.NO );

  // create new layer
  var layerRef = app.activeDocument.artLayers.add()
  layerRef.name = "temp"
  layerRef.blendMode = BlendMode.NORMAL

  //merge visible
  // =======================================================
  var id1435 = charIDToTypeID( "MrgV" );
  executeAction( id1435, undefined, DialogModes.NO );

  // Set filePath and fileName to source path
  filePath = srcDoc.path + '/' + app.activeDocument.name + '.png';

  // save out the image
  var pngFile = new File(filePath);
  pngSaveOptions = new PNGSaveOptions();
  pngSaveOptions.embedColorProfile = true;
  pngSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
  pngSaveOptions.matte = MatteType.NONE; pngSaveOptions.quality = 1;

  activeDocument.saveAs(pngFile, pngSaveOptions, false, Extension.LOWERCASE);

  // alert(filePath)
  // close that save png
  app.activeDocument.close()

  // selects document that's been open the longest
  app.activeDocument = srcDoc;
}
查看更多
登录 后发表回答