banner
CG艺术实验室

CG艺术实验室

数字艺术 / 视觉设计 / 技术分享 / 知识管理
tg_channel
facebook
x
github
bilibili
zhihu
email

LayerRenamer 1.0 腳本發布,PS 圖層重命名從未如此簡單

LayerRenamer 1.0 腳本發布,PS 圖層重命名從未如此簡單 - 第 1 張圖片

引言#

平面設計在使用 Photoshop 處理圖層數較多的 .psd 文件時,挨個對圖層重命名是非常繁瑣耗時的工作。

上網搜了一下,各大網站要麼需要安裝對應版本的插件,要麼腳本發布日期久遠,且非常暴力的把所有圖層全部重命名了。Photoshop 發展了這麼多年,居然一直沒加入這樣簡潔高效的功能,也是匪夷所思。

以下是網上廣為流傳的版本,供參考。

app.bringToFront();
var YourName = prompt("請輸入您需要重命名的圖層名稱",'請輸入')
if (documents.length == 0) {
    alert("沒有圖層");
}
else {
    var visibility = false; 
    var docRef = activeDocument;     
        changeLayerName(docRef);
}

function changeLayerName(layer){

    var layers = layer.layers;

    if(layers){

    for(var i = 0; i < layers.length; i ++){
        layers[i].name = YourName + [i];
        changeLayerName(layers[i]);
    }
}
}

而我需要的功能是#

  • 只修改我當前選中的圖層
  • 圖層支持任意層級
  • 可以為這些圖層加入編號後綴
  • 最好能夠同時修改圖層的 color tag 顏色標籤

製作步驟#

使用文本編輯器新建文本文件,粘貼下面的代碼,可以通過 Adobe Photoshop 2023 的腳本功能實現批量重命名圖層。該腳本可以遍歷當前文檔中所有所選的圖層,並提示用戶輸入自定義的圖層名稱和編號的格式,然後按照用戶指定的格式為每個圖層進行命名。腳本會自動處理圖層是否位於圖層組中。

#target photoshop
app.bringToFront();

if (app.documents.length === 0) {
    alert("沒有打開的文檔。");
    throw new Error("No document open.");
}

var doc = app.activeDocument;

var selectedLayers = getSelectedLayers();
if (selectedLayers.length === 0) {
    alert("沒有選中的圖層。");
    throw new Error("No layers selected.");
}

var baseName = prompt("請輸入基礎圖層名稱:", "Layer");
var startNumber = parseInt(prompt("請輸入編號的起始值:", "1"), 10);
var numberFormat = prompt("請輸入編號格式(例如 001,保持編號位數):", "001");

if (isNaN(startNumber) || !baseName || !numberFormat) {
    alert("輸入無效,請重新運行腳本。");
    throw new Error("Invalid input.");
}

renameLayers(selectedLayers, baseName, startNumber, numberFormat);

function getSelectedLayers() {
    var selectedLayers = [];
    var ref = new ActionReference();
    ref.putEnumerated(charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
    var desc = executeActionGet(ref);

    if (desc.hasKey(stringIDToTypeID('targetLayers'))) {
        var targetLayers = desc.getList(stringIDToTypeID('targetLayers'));
        for (var i = 0; i < targetLayers.count; i++) {
            var layerIndex = targetLayers.getReference(i).getIndex();
            selectedLayers.push(getLayerByIndex(layerIndex + 1)); 
        }
    } else {
        selectedLayers.push(doc.activeLayer);
    }
    return selectedLayers;
}

function getLayerByIndex(index) {
    var ref = new ActionReference();
    ref.putIndex(charIDToTypeID("Lyr "), index);
    var desc = executeActionGet(ref);
    var layerID = desc.getInteger(stringIDToTypeID("layerID"));
    return getLayerById(layerID);
}

function getLayerById(id) {
    var ref = new ActionReference();
    ref.putIdentifier(charIDToTypeID("Lyr "), id);
    var desc = executeActionGet(ref);
    return doc.layers.getByName(desc.getString(charIDToTypeID("Nm  ")));
}

function renameLayers(layers, baseName, startNumber, numberFormat) {
    for (var i = 0; i < layers.length; i++) {
        var currentNumber = (startNumber + i).toString();
        var formattedNumber = zeroPad(currentNumber, numberFormat.length);
        var newName = baseName + formattedNumber;
        layers[i].name = newName;
    }
}

function zeroPad(num, width) {
    while (num.length < width) {
        num = '0' + num;
    }
    return num;
}

以上代碼實現了基本的圖層重命名和編號排序功能,將文件保存名為xxx.jsx的腳本文件即可。

使用步驟:#

  1. 打開 Adobe Photoshop 2023。
  2. 選擇要重命名的圖層(可以在圖層面板中多選,支持嵌套在圖層組中的圖層)。
  3. 進入 文件 -> 腳本 -> 瀏覽...,選擇你保存的腳本文件
  4. 執行腳本後,會出現三個提示框:
  • 第一个提示框要求输入基础图层名称,例如 "Layer"。
  • 第二个提示框要求输入编号的起始值,例如 "1"。
  • 第三个提示框要求输入编号格式,例如 "001",确保编号保持一致的位数。
  • LayerRenamer 1.0 腳本發布,PS 圖層重命名從未如此簡單 - 第 2 張圖片
  1. 選擇確認後,腳本會自動按照你設定的格式重命名所選圖層。

進階版#

以上功能基本夠用了,如果需要加入同時修改顏色標籤可下載進階版。 效果如下所示:

LayerRenamer 1.0 腳本發布,PS 圖層重命名從未如此簡單 - 第 3 張圖片

下載鏈接:

【LayerRenamer_PS-2023.jsx】 https://16b87ca7d6.znas.cn/AppH5/share/?nid=LIYDEMJQGBBDEOCELBIFU&code=r1DtQDtFZobo1ai8Jd0UylatvnNkQ3xcodyiJBPo4ejLcOfybeyVGW0o3LOTKTHF&mode=file&display=list 有效期 7 天,提取密碼:6633

本文首發在少數派

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。