【问题标题】:How to select active layer?如何选择活动层?
【发布时间】:2013-02-25 01:50:31
【问题描述】:

看来,为了调整层的大小,必须选择(从 UI 角度)并从 API 角度激活它。否则,我在任何不支持此函数的函数调用上都会出错。

所以在调整大小之前我会这样做

var a = doc.artLayers.getByName("iPad");
app.activeDocument.activeLayer = a;

这不会在视觉上改变选定的图层,因此调用调整大小函数之后会失败。让它工作的唯一方法是手动单击图层(任何图层),然后它就可以工作了。 在没有用户交互的情况下调整图层大小的正确方法是什么?

【问题讨论】:

    标签: javascript photoshop photoshop-script


    【解决方案1】:

    你只需要修改你的代码:

    var doc = app.activeDocument;
    doc.activeLayer = doc.artLayers.getByName("iPad");
    

    这会将活动层设置为名为“ipad”的层。这是选择图层(按名称)然后进一步处理图像的标准方法,在您的情况下调整它的大小。显然,我不知道 PSD 中还有什么可以选择或忽略的图层。另一种方法是遍历所有层并全部处理。

    这里有两个有用的功能:一个会选择图层蒙版,另一个会取消选择图层蒙版并返回位图图层

    // FUNCTION DESELECT LAYER MASK AND SELECT IMAGE LAYER
    // --------------------------------------------------------
    function deselectLayerMaskAndSelectImageLayer()
    {
      // =======================================================
      var id248 = charIDToTypeID( "slct" );
      var desc48 = new ActionDescriptor();
      var id249 = charIDToTypeID( "null" );
      var ref36 = new ActionReference();
      var id250 = charIDToTypeID( "Chnl" );
      var id251 = charIDToTypeID( "Chnl" );
      var id252 = charIDToTypeID( "RGB " );
      ref36.putEnumerated( id250, id251, id252 );
      desc48.putReference( id249, ref36 );
      var id253 = charIDToTypeID( "MkVs" );
      desc48.putBoolean( id253, false );
      executeAction( id248, desc48, DialogModes.NO );
    }
    
    
    // FUNCTION SELECT MASK
    // --------------------------------------------------------
    function selectMask(LayerName)
    {
      try
      {
        var desc = new ActionDescriptor();
        var ref = new ActionReference();
        ref.putEnumerated( charIDToTypeID('Chnl'), charIDToTypeID('Chnl'), charIDToTypeID('Msk ') );
        ref.putName( charIDToTypeID('Lyr '), LayerName );
        desc.putReference( charIDToTypeID('null'), ref );
        desc.putBoolean( charIDToTypeID('MkVs'), true );
        executeAction( charIDToTypeID('slct'), desc, DialogModes.NO );
    
        // =======================================================
        var id1083 = charIDToTypeID( "setd" );
        var desc238 = new ActionDescriptor();
        var id1084 = charIDToTypeID( "null" );
        var ref161 = new ActionReference();
        var id1085 = charIDToTypeID( "Chnl" );
        var id1086 = charIDToTypeID( "fsel" );
        ref161.putProperty( id1085, id1086 );
        desc238.putReference( id1084, ref161 );
        var id1087 = charIDToTypeID( "T   " );
        var ref162 = new ActionReference();
        var id1088 = charIDToTypeID( "Chnl" );
        var id1089 = charIDToTypeID( "Ordn" );
        var id1090 = charIDToTypeID( "Trgt" );
        ref162.putEnumerated( id1088, id1089, id1090 );
        desc238.putReference( id1087, ref162 );
        executeAction( id1083, desc238, DialogModes.NO );
      }
      catch(e)
      {
      //alert(e)
      //alert( "This layer has NO layer mask!" );
      activeDocument.selection.deselect();
      }
    } //end function
    

    【讨论】:

    • 如何在图层中的位图和蒙版之间切换?
    • @Drazick 我添加了两个函数,可以帮助您在位图图层和图层蒙版之间进行切换
    【解决方案2】:

    您可以在扩展脚本的数据浏览器视图中找到它:

    var doc = app.activeDocument;
    
    // set active layer
    doc.activeLayer = doc.layers.getByName("Layer Name Here");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 2017-12-07
      • 2021-08-08
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      相关资源
      最近更新 更多