在 Photoshop 中检查图层名称的脚本

问题描述 投票:0回答:1

我正在编写一个脚本来检查我的图像。 这是我需要检查的内容:

  1. 计算文档中的图层和路径项 - 这对我来说并不太难。
  2. 3层名称:我卡在这里
  3. 我还想检查这 3 层类型是否正常 - 不是智能对象或纯色...

#target photoshop  

var doc = app.activeDocument;
var pLen = doc.pathItems.length;
var pArray = [];
var nLen = doc.layers.length;
var cArray = [];

if (nLen != 3) 
{alert ("Wrong structure")}
else if (pLen != 2 )
{alert ("Wrong path item")}
else {for (var i=0; i<nLen; i++)
{if (doc.layer[i].getByName ("Freisteller") == false || doc.layer[i].getByName ("Hintergrund") == false || doc.layer[i].getByName ("Hintergrund BR") == false )
{alert ("Wrong layer name")}
}
}

我也尝试过这个,但它不起作用

#target photoshop  

var doc = app.activeDocument;
var pLen = doc.pathItems.length;
var pArray = [];
var nLen = doc.layers.length;
var cArray = [];
var layerName = ["Freisteller", "Hintergrund", "Hintergrund BR"];
 
if (nLen != 3) 
{alert ("Wrong structure")}
else if (pLen != 2)
{alert ("Wrong path item")}
else {for (var i=0; i<nLen; i++)
{if (doc.layer[i].getByName ("Freisteller") != layerName || doc.layer[i].getByName ("Hintergrund") != layerName || doc.layer[i].getByName ("Hintergrund BR") != layerName )
{alert ("Wrong layer name")}
}
}

请帮我修复它

javascript photoshop photoshop-script
1个回答
0
投票

您需要寻找

typename == "ArtLayer"
来表示正常、标准的艺术图层,以及
layer.kind == "LayerKind.SMARTOBJECT"
表示智能对象。对于背景层,layer.isBackgroundLayer == true 。

你的脚本不起作用,因为“getbyname”并不完全是它所说的那样。

doc.activeLayer = doc.artLayers.getByName("Freisteller");

将获得名为“Freisteller”的图层(如果存在)。此外,如果有多个层被调用,它会抓住第一个。你试图从 i 层“获取”它。

这是您的脚本,有一些更改。

#target photoshop  

var doc = app.activeDocument;
var pLen = doc.pathItems.length;
var pArray = [];
var nLen = doc.layers.length;
var cArray = [];
var layerName = ["Freisteller", "Hintergrund", "Hintergrund BR"];

 
if (nLen != 3) 
{
  alert ("Wrong structure\n" + nLen + " layers in file.");
}
else if (pLen != 2)
{
  alert ("Wrong path item");
}
else 
{
  for (var i = nLen -1; i >= 0; i--)
  {
    //if (doc.layer[i].getByName ("Freisteller") != layerName || doc.layer[i].getByName ("Hintergrund") != layerName || doc.layer[i].getByName ("Hintergrund BR") != layerName )
    var n = doc.layers[i].name;
    if (n == "Freisteller"  || n == "Hintergrund" || n == "Hintergrund BR") 
    {
      // all good
      // alert(n);
    }
    else alert ("Wrong layer name");
  }
}

另外,我认为这可能会对您有所帮助。

// call the source document
var srcDoc = app.activeDocument;
var numOfLayers = srcDoc.layers.length;

// main loop
for (var i = numOfLayers -1; i >= 0; i--)
{
    var thisLayer = srcDoc.layers[i];
    srcDoc.activeLayer = thisLayer;
    var k = what_type(thisLayer);
    alert(thisLayer.name  + "\nis a " + k);
}


function what_type(alayer)
{
  if (alayer.isBackgroundLayer == true) return "background layer";
  var lk = alayer.kind;
  if (lk == "LayerKind.SMARTOBJECT") return "smart object";
  else if (lk == "LayerKind.TEXT") return "text layer";
  if (alayer.typename == "ArtLayer") return "normal art layer";
  else return undefined;
}
© www.soinside.com 2019 - 2024. All rights reserved.