Как выровнять один слой относительно другого?

Вопрос или проблема

Я пытаюсь выровнять один слой относительно верхней и левой границ другого слоя. Я нашел код, который выполняет выравнивание, но часть, отвечающая за выбор, я изменил, и она не работает.

Как мне установить выбор на конкретный слой, который у меня есть?

Doc.selection.select(ImgLocation);
Doc.activeLayer = layer;

var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
desc.putReference(charIDToTypeID("null"), ref);
desc.putEnumerated(charIDToTypeID("Usng"), charIDToTypeID("ADSt"), charIDToTypeID('AdLf'));
desc.putEnumerated(charIDToTypeID("Usng"), charIDToTypeID("ADSt"), charIDToTypeID('AdTp'));
try {
  executeAction(charIDToTypeID("Algn"), desc, DialogModes.NO);
} catch (e) {}

Doc.selection.deselect();

ImgLocation – это объект ArtLayer, к которому я хочу выровнять; layer – это слой, на котором я хочу выполнить функцию выравнивания.

Ответ или решение

Для того чтобы выровнять один слой относительно другого в Adobe Photoshop через скрипт на JavaScript, нужно убедиться, что вы корректно устанавливаете ссылки на нужные слои и правильно настраиваете действия.

В вашем случае вы хотите выполнить выравнивание слоя layer относительно размещения другого слоя ImgLocation. Для этого убедитесь, что вы используете правильные идентификаторы слоев для ссылки на них. Вот обновленный пример вашего кода с комментариями:

// Убедитесь, что вы выбрали нужный слой
Doc.activeLayer = layer; // Устанавливаем активный слой на тот, который нужно выровнять

// Создаем дескриптор для действия выравнивания
var desc = new ActionDescriptor();
var ref = new ActionReference();

// Ссылаемся на слой, к которому будем выравнивать
ref.putName(charIDToTypeID("Lyr "), ImgLocation.name); // Используем имя слоя ImgLocation
desc.putReference(charIDToTypeID("null"), ref);

// Указываем, что выравнивание будет по левому и верхнему краям
desc.putEnumerated(charIDToTypeID("Usng"), charIDToTypeID("ADSt"), charIDToTypeID('AdLf')); // Выравнивание по левому краю
desc.putEnumerated(charIDToTypeID("Usng"), charIDToTypeID("ADSt"), charIDToTypeID('AdTp')); // Выравнивание по верхнему краю

// Пытаемся выполнить действие выравнивания
try {
  executeAction(charIDToTypeID("Algn"), desc, DialogModes.NO);
} catch (e) {
  // Обработка ошибки, если необходимо
  alert("Ошибка при выравнивании: " + e.message);
}

// Снимаем выделение
Doc.selection.deselect();

Основные изменения:

  1. Ссылка на слой для выравнивания: Я изменил способ создания ссылки на соотносимый слой ImgLocation. Вместо putEnumerated мы теперь используем putName, чтобы явно указать имя слоя.
  2. Обработка исключений: Я добавил вывод сообщения об ошибке в случае возникновения исключения, чтобы вы могли легче выявлять проблемы, если они возникнут.
  3. Комментарии: Я добавил комментарии для большей ясности и понимания того, что происходит на каждом шаге.

Обратите внимание:

Убедитесь, что значения layer и ImgLocation корректно указывают на нужные слои. Вы можете получить доступ к слоям через их имена или индексы, в зависимости от вашей структуры документа.

Оцените материал
Добавить комментарий

Капча загружается...