【ps脚本】选中图层/图层组计数2.0

选中图层/图层组计数

25.5新版

【功能】

模式一:对选中的图层/图层组计数,选中图层数量>5个时,在历史记录面板自动显示“选中图层:x 图层组:x”
如需修改上下限,修改 (layerCount > 5 && layerCount <= 100) 

模式二:弹窗模式,点击脚本弹出弹窗,显示选中的图层/图层组数量

为何如此设置:性能消耗、是否需要及时输出、不同工作场景等方面的考虑


【使用方法】

1.新建一个txt文档,命名为 图层计数.jsx(可以中文),复制下面代码,粘贴并保存

2.将脚本放置到ps目录下的这个位置:Adobe Photoshop 2020(你的版本)\Presets\Scripts

3.修改var USE_HISTORY_MODE =false的值自行选择模式(默认是模式二)

【代码】

#target photoshop
app.bringToFront();

//———— 修改 true / false 切换模式。true:自动记录到历史记录面板(需先点击一次脚本)false:手动点击查看————
//————上下限修改请找到(total > 5 && total <= 100)————
var USE_HISTORY_MODE =false;
//————————————————————————————————————————————
if ($.fileName) {
    // 清除旧的 notifier,避免错误触发
    try {
        app.notifiers.removeAll();
    } catch (e) {}

    if (USE_HISTORY_MODE) {
        // 注册 notifier(监听图层选择)
        try {
            app.notifiersEnabled = true;
            app.notifiers.add("slct", new File($.fileName));
        } catch (e) {
            alert("事件监听器注册失败: " + e.message);
        }

        // 初始执行一次
        updateLayerCountToHistory();
    } else {
        // 手动模式,弹出窗口
        showLayerCountUI();
    }
} else {
    alert("请先将脚本保存到本地磁盘再运行!");
}

// ========== 模式 A:输出到历史记录 ==========
function updateLayerCountToHistory() {
    try {
        var result = getSelectedLayerDetails();
        var total = result.layers + result.groups;

        if (total > 5 && total <= 100) {
            var historyMessage = "选中图层:" + result.layers + ", 图层组:" + result.groups;
            app.activeDocument.suspendHistory(historyMessage, function () {});
        }
    } catch (e) {
        // 忽略
    }
}

// ========== 模式 B:弹窗模式 ==========
function showLayerCountUI() {
    var win = new Window("dialog", "图层计数");
    win.orientation = "column";
    win.alignChildren = "left";
    win.spacing = 10;
    win.margins = 20;
    win.preferredSize.width = 400;

    var countText = win.add("statictext", undefined, "点击按钮开始计数", { multiline: true });
    countText.preferredSize.width = 360;

    var btnGroup = win.add("group");
    btnGroup.orientation = "row";
    btnGroup.alignment = "right";

    var btnCount = btnGroup.add("button", undefined, "统计选中图层");
    btnCount.preferredSize.width = 160;

    var btnClose = btnGroup.add("button", undefined, "关闭", { name: "cancel" });
    btnClose.preferredSize.width = 80;

    btnCount.onClick = function () {
        try {
            var result = getSelectedLayerDetails();
            countText.text = "已选中图层:" + result.layers + ", 图层组:" + result.groups;
        } catch (e) {
            countText.text = "无法获取图层信息,可能没有选中任何图层。";
        }
    };

    win.center();
    win.show();
}

// ========== 通用函数 ==========
function getSelectedLayerDetails() {
    var ref = new ActionReference();
    ref.putProperty(charIDToTypeID("Prpr"), stringIDToTypeID("targetLayers"));
    ref.putEnumerated(charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
    var desc = executeActionGet(ref).getList(stringIDToTypeID("targetLayers"));

    var layers = 0;
    var groups = 0;

    for (var i = 0; i < desc.count; i++) {
        var layerRef = desc.getReference(i);
        var layerIndex = layerRef.getIndex();

        var layerDesc = getLayerDescriptorByIndex(layerIndex);
        var isGroup = layerDesc.hasKey(stringIDToTypeID("layerSection")) &&
            layerDesc.getEnumerationValue(stringIDToTypeID("layerSection")) !== stringIDToTypeID("layerSectionContent");

        if (isGroup) {
            groups++;
        } else {
            layers++;
        }
    }

    return { layers: layers, groups: groups };
}

function getLayerDescriptorByIndex(index) {
    var ref = new ActionReference();
    ref.putIndex(charIDToTypeID("Lyr "), index);
    return executeActionGet(ref);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值