[PS CC-CC2021] Как удалить векторные слои, находящиеся за пределами холста?

Kolobokk

Топикстартер
15 лет на форуме
Сообщения
935
Реакции
91
Есть документ - шаблон очень большого разрешения с несколькими сотнями текстовых векторных слоёв. Каждый слой - одно слово. Слои разбросаны по директориям вложенных Group-ов.

Как в пару кликов удалить все невидимые слои и оставить только те, изображение которых ограничено рамками холста? (Длинный путь я уже нашёл).
Спасибо!
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Скриптом например
Или это был длинный путь?
 

Kolobokk

Топикстартер
15 лет на форуме
Сообщения
935
Реакции
91
Длинным путём было переименование видимых слоёв через V и удаление остальных непереименованных. Просто хотел узнать, есть ли инструментальное решение без привлечения скриптописателей.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Ну там скрипт по идее в три строки будет. Цикл по всем слоям, проверка координат и удаление.
 

Kolobokk

Топикстартер
15 лет на форуме
Сообщения
935
Реакции
91
@_MBK_, В программировании полный ноль, видно это не моё. Да и шаблон уже сделал. Просто думал есть какая-то хитрая команда вроде обрезки по краю холста для растровых картинок.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Так у вас проблема в том что картинки обрезаны а слои не удалены. Кстати не факт что и скрипт справится - может статься так что он прозрачное место тоже в поле слоя считает, тогда нетривиально понять виден слой или спрятан в тень от теней.
 

Kolobokk

Топикстартер
15 лет на форуме
Сообщения
935
Реакции
91
Да, картинка обрезана, а все слои прозрачные. Это я всё пытаюсь записать универсальный экшин для ватермарка. Хотел было добавлять искажения с помощью Displace, но получилось некрасиво. Так что остановился на наложение через Bavel & Emboss.
 

chesen

15 лет на форуме
Сообщения
552
Реакции
49
м.б. "выделить все"-кроп. Тогда все лишнее упразднится.))
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Теоретически (если скрипт писать) можно выделять все на слое и смотреть - выделилось что-то или нет,если размер выделения нулевой, то слой втопку. Разве что так. 'hmmm'
 

Evgen

Registered User
15 лет на форуме
Сообщения
2 054
Реакции
984
Ну до таких-то мыслей и я додумался. ))
Интересно узнать более эффективное решение. ))
 

Evgen

Registered User
15 лет на форуме
Сообщения
2 054
Реакции
984
вот так 'cooll)'

только, понятное дело, нужно пятнарик иметь ))
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835

Evgen

Registered User
15 лет на форуме
Сообщения
2 054
Реакции
984
А, ну да. ))
Хех, у меня в CS6 тоже есть. ))
Лень-матушка. '))'
Никогда не пользовался.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Тогда только скриптом. Хорошая новость - векторные текстовые слои по координатам фильтруются однозначно
 

subscribe

Забанен
Сообщения
2
Реакции
3
Стрелкой с контролом обвести канвас, выделятся все слои на канвасе. Инвертировать слоевую селекцию любым доступным способом, мочкануть слои.
 

kstati

иɯɐɯɔʞ
10 лет на форуме
Сообщения
1 138
Реакции
512
#target photoshop
var all_layers = app.activeDocument.layers
var i = all_layers.length;
while (i--) {
if( (0 == all_layers.bounds[2].value)|| (0 == all_layers.bounds[3].value)) all_layers.remove();
}

Накидал скрипт - прибить слой, если его высота или ширина нулевая
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Вот как то так
Код:
#target photoshop
var all_layers = app.activeDocument.layers
var i = all_layers.length;
while (i--) {
alert(all_layers[i].bounds);
if (((all_layers[i].bounds[0]<=0) && (all_layers[i].bounds[2]<=0)) ||
    ((all_layers[i].bounds[1]<=0) && (all_layers[i].bounds[3]<=0)) ||
    ((all_layers[i].bounds[0]>=app.activeDocument.width) && (all_layers[i].bounds[2]>=app.activeDocument.width)) ||
    ((all_layers[i].bounds[1]>=app.activeDocument.height) && (all_layers[i].bounds[3]>=app.activeDocument.height)))
  {
   all_layers[i].remove();
  }

}