Photoshop CS6将嵌套图层导出为PNG?

时间:2013-07-18 02:38:58

标签: photoshop

我有一个包含100个图层的PSD。大多数都与组内的单个元素(嵌套)组合在一起。

如何导出到PNG某些个别组(其中包含嵌套图层)?

我不想运行将所有图层导出到PNG脚本,只需要将各个嵌套组(图层)导出到PNG。我找到了一些其他的第三方脚本,但是它们会导出所有内容。只需要导出我选择的那些。

提前致谢

1 个答案:

答案 0 :(得分:1)

这个脚本应该做你想要的。它只适用于你想要选择的组(不是该组中的一个层)我没有对它进行过广泛的测试而且我假设你没有组内的组(这会变得很头疼)

// 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;
}