Показать сообщение отдельно
  #1 (permalink)  
Старый 06.04.2023, 17:55
Новичок на форуме
Отправить личное сообщение для raaaatata Посмотреть профиль Найти все сообщения от raaaatata
 
Регистрация: 06.04.2023
Сообщений: 6

скрипт ps, поиск совпадающих имен с объединением их в группу
Привет, я пытаюсь написать скрипт для поиска и объединения слоев и групп по сопоставлению порядковых номеров, затем объединяю группы и задаю имя группы.

игрался с chatgpt, но так как в javascript я мало разбираюсь, ничего не работает =((

данный:

слои и группы с именами:
"step_n_n"
"mask_n_n"
"back_n_n"
п = порядковый номер

задача:
сгруппировать слои и группы с одинаковыми порядковыми номерами и назвать группы "[slot] step-n-n"

вот какой код получился... но чую что то в нем не так))
// Создаем функцию для сравнения порядковых номеров
function compareNumbers(a, b) {
  // Извлекаем порядковые номера из имен слоев
  var aNum = parseInt(a.name.match(/_(\d+)_(\d+)/)[2]);
  var bNum = parseInt(b.name.match(/_(\d+)_(\d+)/)[2]);
  // Сравниваем номера и возвращаем результат
  return aNum - bNum;
}

// Создаем массив из всех слоев в документе
var doc = app.activeDocument;
var layers = doc.layers;

// Фильтруем слои по заданным шаблонам и создаем новые массивы
  var steplayers = layers.filter(function(layer) {
  });
var steplayers = layers.filter(function(layer) {
  return layer.name.match(/^step_\d+_\d+$/);
});
var masklayers = layers.filter(function(layer) {
  return layer.name.match(/^mask_\d+_\d+$/);
});
var backlayers = layers.filter(function(layer) {
  return layer.name.match(/^back_\d+_\d+$/);
});

// Сортируем массивы по порядковым номерам
steplayers.sort(compareNumbers);
masklayers.sort(compareNumbers);
backlayers.sort(compareNumbers);

// Создаем группы для слоев
var stepGroup = doc.layerSets.add();
stepGroup.name = "[slot] step-" + stepLayers[0].name.match(/-(\d+)-(\d+)/)[1];

// Перемещаем слои в соответствующие группы
for (var i = 0; i < steplayers.length; i++) {
  steplayers[i].move(stepGroup, ElementPlacement.PLACEATEND);
}
for (var i = 0; i < masklayers.length; i++) {
  masklayers[i].move(stepGroup, ElementPlacement.PLACEATEND);
}
for (var i = 0; i < backlayers.length; i++) {
  backlayers[i].move(stepGroup, ElementPlacement.PLACEATEND);
}
Ответить с цитированием