引言
平面设计在使用 Photoshop 处理图层数较多的 .psd
文件时,挨个对图层重命名是非常繁琐耗时的工作。
上网搜了一下,各大网站要么需要安装对应版本的插件,要么脚本发布日期久远,且非常暴力的把所有图层全部重命名了。Photoshop 发展了这么多年,居然一直没加入这样简洁高效的功能,也是匪夷所思。
以下是网上广为流传的版本,供参考。
i++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 的脚本文件即可。
使用步骤:
- 打开 Adobe Photoshop 2023。
- 选择要重命名的图层(可以在图层面板中多选,支持嵌套在图层组中的图层)。
- 进入
文件
->脚本
->浏览...
,选择你保存的脚本文件。 - 执行脚本后,会出现三个提示框:
- 第一个提示框要求输入基础图层名称,例如 "Layer"。
- 第二个提示框要求输入编号的起始值,例如 "1"。
- 第三个提示框要求输入编号格式,例如 "001",确保编号保持一致的位数。
- 选择确认后,脚本会自动按照你设定的格式重命名所选图层。
进阶版
以上功能基本够用了,如果需要加入同时修改颜色标签可下载进阶版。 效果如下所示:
下载链接:
【LayerRenamer_PS-2023.jsx】
有效期 7 天,提取密码:6633
本文首发在少数派。