Вопрос или проблема
Я пытаюсь выровнять один слой относительно верхней и левой границ другого слоя. Я нашел код, который выполняет выравнивание, но часть, отвечающая за выбор, я изменил, и она не работает.
Как мне установить выбор на конкретный слой, который у меня есть?
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();
Основные изменения:
- Ссылка на слой для выравнивания: Я изменил способ создания ссылки на соотносимый слой
ImgLocation
. ВместоputEnumerated
мы теперь используемputName
, чтобы явно указать имя слоя. - Обработка исключений: Я добавил вывод сообщения об ошибке в случае возникновения исключения, чтобы вы могли легче выявлять проблемы, если они возникнут.
- Комментарии: Я добавил комментарии для большей ясности и понимания того, что происходит на каждом шаге.
Обратите внимание:
Убедитесь, что значения layer
и ImgLocation
корректно указывают на нужные слои. Вы можете получить доступ к слоям через их имена или индексы, в зависимости от вашей структуры документа.