Скриптинг в Photoshop CS3

  • Автор темы Автор темы vadim_k
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

vadim_k

Участник
Топикстартер
Сообщения
28
Реакции
0
Всем доброго вечера!
Передо мной стоит задача определить из скрипта, есть ли в активном документе хотя бы одна выделенная область. Контроль происходит после закрытия быстрой маски.
Пошел по пути использования свойств app.Activedocument.selection. К сожалению, ожидаемого свойства типа is_selected не обнаружил. Тогда решил провоцировать ошибку и иcпользовать такой код:

copyDoc.selection.selectAll();
copyDoc.selection.copy();
copyDoc.close(SaveOptions.DONOTSAVECHANGES);
mainDoc.quickMaskMode = true;
mainDoc.paste();
mainDoc.quickMaskMode = false;
try {var temp_var = mainDoc.selection.bounds[0]; return true}
catch (error) {return false}.

но ожидаемая ошибка возникает только со второй попытки, т. е. уверенности в работе такого скрипта нет. Визуально выделенных областей в документе после закрытия быстрой маски нет. В общем случае возможно наличие нескольких выделенных областей, как определить их количество, тоже не смог решить.
Пожалуйста, если есть идеи, помогите.
Спасибо за ответ.
 
Ответ: Скриптинг в Photoshop CS3

но ожидаемая ошибка возникает только со второй попытки, т. е. уверенности в работе такого скрипта нет.
Тем не менее, подход к определению наличия/отсутствия в активном документе выделенной области похоже, оказался правильным. При отладке скрипта в моем тестовом изображении выделенная область имела размеры в пиксел и была практически незаметной. При поиске решения проблемы в Интернете натолкнулся на скрипт SaveSelectionToJPEG.jsx на англоязычном форуме Adobe Photoshop Scripting. Поскольку код скрипта был общедоступен, приведу здесь его фрагмент, а именно функцию определения наличия в активном документе выделенной области:
function detectSelection() {
// declare local variables
var userHistory = activeDocument.activeHistoryState;
var isSelection = false;

// try Selection, Modify, Border and then undo if selection is detected
try {
activeDocument.selection.selectBorder(1);
activeDocument.activeHistoryState = userHistory;
isSelection = true;
}
// catch errors - no selection detected
catch (e) {}
return isSelection;
}

Принцип такой же - провоцирование ошибки и ее анализ с использованием try - catch. Возможно, это кому-нибудь пригодится. Как подсчитать количество нескольких одновременно выделенных областей - пока не знаю.
Дорогу осилит идущий
 
Ответ: Скриптинг в Photoshop CS3

Не надо юзать быструю маску. Результат зависит от ее настроек.
 
Статус
Закрыто для дальнейших ответов.