javascript - 如何选择事件层?

标签 javascript photoshop photoshop-script

似乎为了调整层的大小,它必须被选中(从 UI 的 Angular )并且从 API 的 Angular 激活。否则,我会在任何函数调用中收到错误消息,提示该函数不受支持。

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

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

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

最佳答案

你只需要修改你的代码:

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

关于javascript - 如何选择事件层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15312279/

相关文章:

javascript - 按键排序数组或 : Why is my for loop executing out of order?

html - 从 Photoshop 到 html 的背景

ios - 如何从设计为 1242px x 2208px 的 PSD 中剪切 iOS8 资源

javascript - 为什么我的 React 组件状态显示在我的 url 中?

javascript - JS 文件以 HTML 形式加载(通过 Markdown 生成)但未执行

javascript - 出现警告框后运行 Action 的 Photoshop(CC) 脚本

javascript - 如何使用 Action 管理器获取图层的数据,排除具有特定图层集的图层?

javascript - Photoshop Javascript获取事件文档中的所有图层

javascript - Javascript for 循环中的变量范围

image-processing - 在Photoshop中进行曝光调整的背后的数学原理是什么?