首页 > 解决方案 > 如何使用 JavaScript 在 Photoshop 中查找空组/文件夹?

问题描述

我正在编写一个 Photoshop 脚本来对几个自定义图层组进行一些处理。在我的情况下,我可能需要忽略一些空组。

所以我想使用脚本来查找空组,我该如何实现呢?

我在想的是获取每个 layerSets 并检查它的长度。如果它等于 0 则为空。但是 layerSets 的“长度”似乎不适用于此。

那么我应该使用哪个属性?或者有什么更好的方法?

谢谢

标签: javascriptphotoshopphotoshop-script

解决方案


我不会尝试使用 DOM 找到那些,因为它在遍历层方面有很多限制......

在 AM 代码中,我会这样做:因为组实际上是两个独立的实体,所以我将遍历所有层并检查何时layerSectionStartlayerSectionEnd(类型713)相互跟随。

(function()
{
    var myLayers = getAll(),
        emptyGroups = "";

    for (var i = 0; i < myLayers.length; i++)
    {
        myLayers[i].isEmpty && emptyGroups += "name: " + myLayers[i].name + "; index: " + myLayers[i].index + "\n";
    }

    alert(emptyGroups == "" ? "No empty groups found" : emptyGroups);

    function getAll()
    {
        var lyrs = [],
            prevType = -1,
            thisType = -1;
        try
        {
            activeDocument.backgroundLayer;
            var layers = 0
        }
        catch (e)
        {
            var layers = 1;
        };
        while (true)
        {
            ref = new ActionReference();
            ref.putIndex(charIDToTypeID('Lyr '), layers);
            try
            {
                var desc = executeActionGet(ref);
            }
            catch (err)
            {
                break;
            }
            thisType = desc.getInteger(stringIDToTypeID("layerKind"));
            var lyr = {
                name: desc.getString(charIDToTypeID("Nm  ")),
                index: layers,
                type: thisType, //7 is start of the group. 13 is end of the group
                isEmpty: (thisType == 7 && prevType == 13) ? true : false,
            };
            prevType = thisType

            lyrs.push(lyr)
            layers++;
        }
        return lyrs
    }
})()

结果:

在此处输入图像描述


推荐阅读