Форум для школьных фотографов Vinyetka.ru

Общий раздел => Цифровая обработка изображений => Тема начата: jazz-y от 15 Январь 2020, 21:12:58

Название: Помогите автоматизировать процесс сборки виньетки
Отправлено: jazz-y от 15 Январь 2020, 21:12:58
Коллеги, думаю многие видели и собирали такие виньетки:
(https://a.radikal.ru/a08/2001/4b/be05e92928d1.jpg)

Крупный портрет ученика + остальной класс (все дети, кроме этого ученика).

Не думаю, что кто-то ожидает такой вопрос от меня, но тем не менее - как вы автоматизируете сборку? :)

У меня пока это в полуручном режиме - сначала собираю общую виньетку без одного ученика (первую сборку всегда делаю вручную, т.к. слежу за поворотом головы, за тем чтобы чередовались мальчик-девочка,  не было цветных/контрастных пятен по цвету одежды), затем экшеном прогоняю одного ребенка по кругу (так, чтобы он последовательно заменил все плашки виньеток), т.е. (в данном случае) получаю 25 разных файлов, каждый одной замененной фотографией и именем замененного ребенка. Затем вручную (основываясь на имени файла) докидываю портрет ребенка, именем которого назван файл. Мне кажется, что это можно как-то проще сделать... возможно нужно написать скрипт, выполняющий какое-то одно действие, облегчающее весь процесс. Но какой?

Название: Re: Помогите автоматизировать процесс сборки виньетки
Отправлено: Yrii от 16 Январь 2020, 00:58:37
все дети, кроме этого ученика
Зачем себе усложнять, пусть будут все(и с этим учеником), а в индивидуальной просто с другим поворотом головы и в другой позе.
Название: Re: Помогите автоматизировать процесс сборки виньетки
Отправлено: jazz-y от 16 Январь 2020, 02:07:07
Зачем себе усложнять, пусть будут все(и с этим учеником), а в индивидуальной просто с другим поворотом головы и в другой позе.
Это понятно (мы так и делаем последние лет 10). Просто всё чаще спрашивают именно про тот вариант, который я озвучил. Все упирается в отсутствие простого инструмента для реализации такого варианта. Пытаюсь найтит максимально универсальный подход к решению проблемы.
Название: Re: Помогите автоматизировать процесс сборки виньетки
Отправлено: Влад от 16 Январь 2020, 06:04:58
Коллеги, думаю многие видели и собирали такие виньетки
Надо в общей ветке тему открывать,здесь обитает 10 чел. 8 из который такие виньетки с прошлого века не делает.  :)
Название: Re: Помогите автоматизировать процесс сборки виньетки
Отправлено: Chesen от 16 Январь 2020, 06:20:27
Если не ошибаюсь, когда-то давно на форуме demiart пользователь Pash-IV  выкладывал платный скрипт именно для таких виньеток. Последовательно менялся крупный портрет. И еще какие-то плюшки предлагались.
На мой взгляд, ни к чему эта возня. Давно делаем общую виньетку, и отдельно портрет.
Название: Re: Помогите автоматизировать процесс сборки виньетки
Отправлено: ИГОРЬ от 16 Январь 2020, 06:54:19
у меня идет допустим файл обложки на котором индивидуальное фото каждого ...на ней слоями фотографии воспитанников. Выровненные и выставленные по размеру и направляющим. потом они же идут на окошки. получается подобие бутерброда из слоев . Эти слои перетаскиваю на новый холст или с этого же, но дубля( что бы потом удалить) и сжимаю (уменьшаю) до размера окошек. потом простым перетаскивание формирую виньетку. мальчик-девочка. при сноровке это идет все очень быстро.
Название: Re: Помогите автоматизировать процесс сборки виньетки
Отправлено: DIM от 16 Январь 2020, 09:18:33
Все можно организовать в одном файле.
Подразумевается, что фото(файлы) самих детей подписаны.
На практике не прогонял, все из головы, поэтому возможны ошибки в алгоритме, но думаю, идею ты поймешь.


/* подготовка
1. В большое окошко кидаются все дети, выравниваются.
2. Далее, из подготовленных фото из большого окошка по твоему алгоритму собирается виньетка без одного ребенка. Подписывается.
3. Слой с фотографией, которого пока нет на общей виньетке самый нижний в списке портретов.
4. Слои в большом окошке делаешь невидымыми, кроме одного, которого нет на общей виньетке.
5. Делашь копию слоя с ребенком, которого нет на виньетке. Скрываешь видимость этого слоя.
6. Готовый бутерброд виньетки без портретов закидываешь в группу, даешь ей имя, к примеру, Оригинал.
7. В палитре слоев группу Оригинал перемещаешь под фото, которого нет на виньетке.
/* в цикле
8. Создаешь копию группы Оригинал.
9. Копируешь в буфер имя видимого слоя в большом окошке.
10.Сливаешь видимое фото в большом окошке с копией группы Оригинал. Даешь (из буфера) имя получившемуся слою. Скрываешь получившийся слой.
11.Переходишь к группе Оригинал, располагаешь его над только что скрытым слоем. Над ним должен быть слой следующий (скрытый) слой фото в окошке.
12.Делаешь видимым копию слоя с ребенком в большом окошке, из шага 5. (Он должен быть под группой Оригинал)
13.Выбираешь этот слой, масштабируешь его под вставку в виньетку, выделяешь слой, копируешь в буфер, удаляешь слой.
14.Переходишь к слою над копией группы Оригинал, копируешь в буфер обмена (присваиваешь переменной значение) имя слоя выше.
15.Находишь в группе Оригинал слой с именем из переменной, шаг 14
16.Выделяешь этот слой, из буфера вставляешь фото. Подписываешь вставленное фото.
17.Делаешь слой фото в большом окошке видимым.
18.Переходишь к шагу 8.
Название: Re: Помогите автоматизировать процесс сборки виньетки
Отправлено: jazz-y от 16 Январь 2020, 16:11:16
DIM, проблема в том, что портрет - это не всегда то же самое фото, что и на виньетке. Иногда нужно сопоставить фото на виньетке с поясным портретом или групповой фотографией (небольшая группа 3-4 ребенка). Хочется придумать какой-то универсальный инструмент для всех возможных ситуаций :)

На мой взгляд, ключевая проблема подобных алгоритмов в том, что нужно сопоставлять слой на виньетке со слоем на портрете (к слову, это не только на таких макетах нужно). Если сопоставление делается вручную, то обычно слои подписываются номером или фамилией ребенка. Попробую набросать вот такой скриптик, посмотрю как он в работе:
(https://d.radikal.ru/d17/2001/4b/473b9df28d41.png)
Суть такая - выделяем слой на виньетке, запускаем скрипт, он находит другой слой в том же документе с таким же (полностью или частично) именем. Далее рулим экшенами или другими скриптами.
Название: Re: Помогите автоматизировать процесс сборки виньетки
Отправлено: DIM от 16 Январь 2020, 16:42:44
проблема в том, что портрет - это не всегда то же самое фото, что и на виньетке. Иногда нужно сопоставить фото на виньетке с поясным портретом или групповой фотографией
И в чем проблема? Опять же, кидаешь в psd ВСЕ подписанные фото. Просто изначально надо к имени дописать, к примеру, префикс "потрет" и обрабатывать для вставки в виньетку фото с этим префиксом.
Название: Re: Помогите автоматизировать процесс сборки виньетки
Отправлено: jazz-y от 19 Январь 2020, 00:54:33
В общем, накидал пробную версию скрипта.

Его смысл в том, что он анализирует имя выделенного слоя, ищет в документе слои с похожими именами, после чего активирует их. Можно управлять видимостью, параметрами выделения, задавать абсолютный поиск (полное совпадение имени), либо поиск по словам (имя выделенного слоя разбивается на слова, после чего каждое слово ищется в других слоях, в результат попадают слои с наибольшим количеством совпадений), так же можно устанавливать фильтр по типу слоя (чтобы при выделении графического слоя скрипт не искал, например, текстовые слои). Как обычно все основные функции писал на чистом Action Manager коде, минимизировал обращения к фотошопу как мог - могу уверенно сказать, что быстрее чем в этом скрипте подобную задачу не решить (на примере из видео (59 слоев) сопоставление одной пары слоев (на моем компе) занимает около 0,1 сек)

На видео - короткий пример как собрать ту виньетку, о которой я говорил. На листе две группы слоев - в одной группе виньетки (имена слоев подписаны без номера кадра), в другой группе - портреты тех же детей (в данном случае поясные), они подписаны, но чуть по-другому (с номерами).

https://youtu.be/fWzjKyztqBg (https://youtu.be/fWzjKyztqBg)
http://www.youtube.com/watch?v=fWzjKyztqBg

В итоге с помощью этого (и еще пары моих скриптов), можно собрать такую виньетку одним экшеном буквально в 10 действий.
Понимаю, что тут накладываются особенности моего рабочего процесса (как говорит Иван - "своя логика" :) ) - я не раскидываю головы непосредственно на виньетке, а делаю это на этапе подготовки макета в отдельном файле, они попадают в макет уже кропнутые, с рамкой и подписью в виде смарт-объекта. В принципе, с небольшими изменениями можно автоматизировать и более привычный большинству процесс с раскидыванием голов непосредственно на макете. Даже если вам не нужно собирать такие виньетки, то скрипт может пригодиться для автоматической линковки слоев или для других случаев, когда в документе требуется найти слой с таким же именем как и выделенный.

В течение пары дней допишу пару мелочей в скрипте, еще раз проверю на ошибки и пограничные случаи (когда что-то может пойти не так) и выложу. Пока его писал, таскал куски кода из старых скриптов (я ж лентяй - зачем 2 раза писать то, что уже написано). Заметил некоторые мелочи, которые нужно исправить - скорее всего выложу все исправления пачкой. Так же для работы скрипта требуется модифицированная версия Batch for layers - когда я его писал, планировал, но совершенно забыл добавить галочку "делать выбранные слои невидимыми" (чтобы была возможность отключить ее в подобных случаях).