调整photoshop智能对象JavaScript

调整photoshop智能对象JavaScript,javascript,photoshop,photoshop-script,Javascript,Photoshop,Photoshop Script,我发现了一个JavaScript,它可以使Photoshop中的每一层都成为一个智能对象,这太棒了,但我想知道是否有人可以为我调整它。我在AppleScript中使用此禁令。由于对Javascript了解不多,我希望有人能对此进行调整,以选择所有层,并在当前文件的所有层中创建一个智能对象 我正在使用的代码: // MAIN var doc = app.activeDocument; var layers = doc.layers; //array of parent layer/layerse

我发现了一个JavaScript,它可以使Photoshop中的每一层都成为一个智能对象,这太棒了,但我想知道是否有人可以为我调整它。我在AppleScript中使用此禁令。由于对Javascript了解不多,我希望有人能对此进行调整,以选择所有层,并在当前文件的所有层中创建一个智能对象

我正在使用的代码:

// MAIN

var doc = app.activeDocument;
var layers = doc.layers; //array of parent layer/layersets present in active document

for(var i = 0; i < layers.length; i++)
{
   if(!layers[i].isBackgroundLayer) createSmartObject(layers[i]);
}


//FUNCTIONS 

// create smartobject from specified layer (default is active layer)
function createSmartObject(layer)
{
   var doc = app.activeDocument;
   var layer = layer != undefined ? layer : doc.activeLayer;

   if(doc.activeLayer != layer) doc.activeLayer = layer;

   try
   {
      var idnewPlacedLayer = stringIDToTypeID( "newPlacedLayer" );
      executeAction( idnewPlacedLayer, undefined, DialogModes.NO );
      return doc.activeLayer;
   }
   catch(e)
   {
      return undefined;
   }
}// JavaScript Document
//MAIN
var doc=app.activeDocument;
var层=doc.layers//活动文档中存在的父层/层集数组
对于(变量i=0;i
更新-澄清

上面的脚本接受每一层,一次一层将其更改为智能对象。我希望它选择文档中的每一层,并使其成为一个智能对象,而无需展平


举个例子,如果我用手来做的话。我会制作一个PS文档,有我想要的多少层。为了便于论证,我们假设有3层。我会选择3个图层(这是文档中的所有图层),然后右键单击并选择“生成智能对象”。现在我有了一个智能对象,其中有一个层。

我已经重新编写了代码,因为我知道您不希望层变平。这应该能奏效

app.preferences.rulerUnits = Units.PIXELS;

getThoseLayers();
createSmartObject();

function getThoseLayers ()
{
  var srcDoc = app.activeDocument;
  var numOfLayers = srcDoc.layers.length;

  // get the top layer
  srcDoc.activeLayer = srcDoc.layers[0];

  for (var i = numOfLayers -1; i >= 0; i--)
  {
    if(!srcDoc.layers[i].isBackgroundLayer)
    {
      addToSelection(srcDoc.layers[i].name)
    }
  }
}

function addToSelection (alayername)
{
  if (alayername == null) return

  try
  {
    var id66 = charIDToTypeID( "slct" );
    var desc14 = new ActionDescriptor();
    var id67 = charIDToTypeID( "null" );
    var ref12 = new ActionReference();
    var id68 = charIDToTypeID( "Lyr " );
    ref12.putName( id68, alayername );
    desc14.putReference( id67, ref12 );
    var id69 = stringIDToTypeID( "selectionModifier" );
    var id70 = stringIDToTypeID( "selectionModifierType" );
    var id71 = stringIDToTypeID( "addToSelection" );
    desc14.putEnumerated( id69, id70, id71 );
    var id72 = charIDToTypeID( "MkVs" );
    desc14.putBoolean( id72, false );
    executeAction( id66, desc14, DialogModes.NO );
  }
  catch(e)
  {
      alert("Whoops! Problem getting layer " + alayername)
  }
}

// create smartobject
function createSmartObject()
{
   try
   {
      var id325 = stringIDToTypeID( "newPlacedLayer" );
      executeAction( id325, undefined, DialogModes.NO );
   }
   catch(e)
   {
      alert("Whoops! Failed to make smart object " + e)
   }
}
它用于抓取所有层(背景除外)并选择这些层。我还没有对它进行过广泛的测试,但它似乎可以在组内工作,即使您有两个命名相同的层。如果它真的失败了,它会告诉你的。
希望您觉得它有用。

不确定除了删除高级评论中的“谢谢”之外,还有什么改变。不是我编辑的目的是什么@标记该文件已满,但我希望不会展平该文件。我想要一个分层的智能对象。如果你有多个图层,我想把它们全部选中,然后把选中的图层做成一个智能对象。这不是我所理解的“在当前文件的所有图层中做成一个智能对象”的意思。你需要详细解释你开始的脚本有什么问题,以及你想从中得到什么。很抱歉造成混乱,我已经更新了我希望能更详细地了解我正在尝试做什么。不用担心。我已经更改了代码,所以它现在应该可以正常工作了。工作起来很有魅力,但我有一个问题。如果我以后编辑智能对象,则会有一个带有默认“layer 2”名称的空层。问这个问题感觉很不好,但无论如何,没有那个空白层?