Actions. Почему они отказываются работать?

Jul 18, 2013 15:11

Когда речь заходит об экшенах, большинство представляет себе «чудо какой сценарий, все сделающий за меня». На худой конец «все сделающий так, что мне останется только непрозрачность поправить или несколько раз кистью махнуть». В принципе, такой подход не лишен здравого смысла: для того и создаются сценарии обработки (actions) чтобы делать работу за пользователя. Я и сам когда-то сделал один такой экшен, не всегда, но достаточно часто приводящий в чувство цвета, а на пейзажах срабатывающий практически всегда.

Но в реальной работе большинство экшенов исполняют отнюдь на «магические», а технологические функции. Тонкости настроек и чудеса коррекции (или ретуши) остаются на долю оператора, а экшен просто выполняет набор рутинных операций, экономя наше время.

Именно о написании таких экшенов я рассказывал на мастер-классах «Actions - автоматизация в Photoshop» и «Частотное разложение 2.0» в онлайн школе Profile. Немного поразмыслив над прошедшими занятиями и получившимися экшенами я решил внести несколько интересных модификаций, а заодно и описать основные принципы экшеностроения.

Этой статьей начинается небольшой цикл материалов посвященных автоматизации обработки. В качестве подопытного выступит вот эта фотография набережной Копенгагена, хорошо знакомая учащимся базового онлайн курса Adobe Photoshop.



Я не буду повторять азбучные истины. Как включить запись экшена, остановить ее, переименовать, перенести или проиграть экшен вы сможете прочитать в справочнике. Мы обсудим более интересные вопросы: как сделать работу экшена стабильной и быстрой.

На мастер-классах или в видео уроках часто можно услышать: «Чтобы сделать экшен просто включите его запись и начинайте обрабатывать изображение». Бесспорно, в результате вы получите некоторую последовательность операций, но не факт, что она корректно применится к другому изображению или на другом компьютере.

Прежде чем записывать экшены давайте разберемся, что делает работу экшена неустойчивой? Почему он может давать сбои на локализованной (русской, украинской, немецкой и т.п.) версии Photoshop или неверно сработать с файлом имеющим определенную послойную структуру. Какие существуют проблемы устойчивости. И давайте сразу условимся: имеющаяся структура слоев была создана не зря и не должна страдать от работы экшена.

Проблема № 1. Разные названия элементов (слоев, каналов) в разных версиях Photoshop

При создании нового слоя (канала, пути) ему автоматически присваивается имя. И имя это зависти от версии программы. Оригинальный фотошоп назовет слой «Layer 1», руссифицированная версия присвоит ему имя «Слой 1», какой имя присвоит китайская версия я даже представить боюсь.

Если в дальнейшем выбрать слой просто щелкнув по нему мышкой, в экшен будет прописана команда «Select layer "Layer 1"». В этом месте локализованный фотошоп выдаст ошибку, ведь у него нету слоя с таким названием. В обратную сторону (от локализованной версии к оригинальной) и между разными локализациями совместимости так же не будет.

Проблема № 1.1. Разные названия элементов (слоев, каналов) в зависимости от уже существующей структуры файла.

Даже если работа происходит в одной версии программы, экшен записанный на примере одного изображения может выдать ошибку на другом. Почему? А потому что в новом изображении уже есть слой с названием «Layer 1», а созданный в процессе выполнения экшена слой получит название «Layer 2». В результате описанная выше команда «Select layer "Layer 1"» промахнется с выбором слоя и все пойдет наперекосяк.

Решение проблем № 1 и 1.1

На поверхности лежит вариант с принудительным переименованием вновь созданного слоя (канала, пути). Можно просто создать слой, а потом дважды щелкнуть по его названию, или выбрать команду Layer -> Rename Layer. В этом случае в экшен запишутся две команды: Make Layer и Set current layer Name "…". То есть сначала будет создан слой, а потом он же (вне зависимости от имеющегося имени) будет переименован.

Это честный способ, но чтобы минимизировать количество команд в экшене, эти операции можно совместить. Создайте новый слой командой Layer -> New -> Layer и вы сразу сможете его переименовать, а заодно и задать некоторые дополнительные настройки.

Аналогичные приемы применяются при создании каналов. Для этого нужно воспользоваться командой New Channel из выпадающего меню палитры Channels или кликнуть левой клавишей мышки по иконке быстрого создания канала в нижней части палитры Channels с предварительно зажатой клавишей Alt.

Проблема № 2. Наличие в изображении нескольких слоев с одинаковыми названиями.

Мы можем присваивать сколь угодно осмысленные имена слоям, но это не страхует нас от совпадения с названием уже существующих слоев. И если имя «Vtoroy siniy dom sprava» вряд ли будет повторяться, то названия «Red Channel», «Sharp», «Low», «High» (здесь наиболее внимательные читатели могут предугадать темы следующих статей) и т.п. будут встречаться сплошь и рядом. Особенно, если вы уже применяли такой же экшен к данному изображению.

Если при записи экшена вы выберете один из этих слоев просто щелкнув по нему мышкой, программа запомнит это как команду «Select layer "Red Channel"» (или любое другое конкретное имя). При наличии второго слоя с таким именем фотошоп гарантированно (проверено) ошибется и выберет его. Почему? А потому что он выберет первый снизу из одноименных слоев, то есть тот, который был раньше.

Решение проблемы № 2

Единственный вариант решения этой проблемы - отказ от прямого выбора слоя. Вместо этого используйте переключение на один слой вверх «Alt»+«]» и на один слой вниз «Alt»+«[». Чтобы перейти на несколько слоев команду можно повторить несколько раз. Не пугайтесь разрастания экшена. Команды переключения между слоями не требуют пересчета изображения и выполняются очень быстро вне зависимости от размера изображения.

Если нужно не просто переключиться на новый слой, а выделить его в дополнение к предыдущему, используйте команды «Alt»+«Shift»+«]» (добавить к выделенным слой лежащий над активным) и «Alt»+«Shift»+«[» (добавить к выделенным слой лежащий под активным).

Проблема № 3. Как перемещать существующие слои вверх или вниз.

Не меньшей проблемой является перемещение слоев. Если подхватить слой мышкой и перенести на новое место в структуре слоев, в экшен будет записана команда «Move Current Layer To: Layer N», где вместо символа N будет указан порядковый номер нового положения слоя, считая от самого нижнего. То есть, фотошоп запоминает не относительный сдвиг (поднять/опустить на сколько-то позиций), не положение относительно других слоев (поставить над слоем с определенным именем), а абсолютную позицию в структуре слоев.

Что это значит? Что такой экшен сработает только в том случае, если в новом изображении под перемещаемым слоем имеется ровно столько же слоев, сколько было в изображении на котором создавался экшен. Мягко говоря, это слишком жесткое условие, чтобы его можно было выполнить на практике. Есть один вариант: в начале работы экшена поставить команду Flatten Image. Но мы ведь условились беречь структуру слоев.

Решение проблемы № 3

Использовать для перемещения слоев команды из меню Layer->Arrange. Они реализуют относительный сдвиг, поэтому не зависят от лежащей ниже структуры слоев. Здесь я не буду гнать вас в справочник (хотя и стоило бы) и расшифрую смысл команд.
Bring to Front - сделать слой самым верхним в структуре слоев
Bring Forward - поднять слой на одну позицию вверх
Send Backward - опустить слой на одну позицию вниз
Send to Back - сделать слой самым нижним в структуре слоев
При этом не важно, вызывали вы команды из верхнего меню или использовали горячие клавиши. В экшене они пропишутся одинаково.

Проблема № 4. Как зафиксировать на новом слое текущее избражение.

Если все слои на изображении сведены в один слой Background проблем нет. Просто копируем этот слой и продолжаем работу. Именно так и поступают многие создатели экшенов: первой командой вписывают Flatten Image, избавляясь от неоднозначностей послойной структуры изображения. Но мы же с вами условились: хороший экшен не должен портить хранящуюся в слоях историю обработки.

Если изображение многослойное можно предварительно зажать клавишу «Alt» и применить команду Merge Visible из выпадающего меню палитры Layers («Cmd»+«Alt»+«Shift»+«E»). Но она не сработает если текущий слой не отображается (выключен глаз) или если схлопывать в слоях просто нечего. То есть, эта команда не универсальна.

Решение проблемы № 4

Чтобы экшен срабатывал всегда необходимо применять команды не зависящие от структуры слоев. А для упрощения задачи разобьем ее на две части: создать новый слой и перенести на него текущее изображение.

Как создать новый слой описано в решении проблемы №1, а перенести на него текущее изображение поможет команда Image -> Apply Image с настройками Layer: Merged, Channel: RGB.

Проблема № 5. Как сделать команду Apply Image независимой от названия конкретного слоя.

Команда Apply Image позволяет забирать изображение не только с виртуального слоя Merged (то есть видимую версию изображения), но и с отдельных слоев. Однако, в этом случае мы заносим ногу над потенциальной ловушкой. В изображении может не оказаться слоя с нужным названием, в этом случае экшен остановится и выдаст сообщение об ошибке. Или, что еще хуже, слоев с таким названием окажется несколько.

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

Решение проблемы № 5

При работе с Apply Image не забирайте изображение с отдельных слоев. Используйте только текущую версию изображения, то есть настройку Layer: Merged. Это можно сделать организовав правильную последовательность работы со слоями и их взаимное перемещение. Но нередко такая организация работы вызывает необходимость отключить видимость созданных ранее слоев, что порождает следующую проблему.

Проблема № 6. Как выделить отключенные ранее слои не кликая по ним мышкой.

Можно отключить видимость любого слоя используя команду Layer -> Hide Layer или просто щелкнув мышкой по пиктограмме глаза в палитре слоев. В экшен эти действия запишутся одинаково: Hide current layer. Проблема в том, что теперь команды переключения на следующий («Alt»+«]») или предыдущий («Alt»+«[») слой будут перескакивать через слой выключенный. И выделить его можно будет только прямым кликом мышкой. А это, как мы выяснили решая проблему №2, чревато сбоями.

Решение проблемы № 6

Не отключайте видимость слоя, а просто задайте ему нулевую непрозрачность (Opacity 0%). Экшен запомнит это как обычное изменение настроек слоя, которые в любой момент можно будет вернуть обратно.

Еще один плюс такого метода в том, что с полностью прозрачным слоем (в отличии от отключенного) можно продолжать работать: применять к нему коррекции, забрасывать на него изображения, создавать и редактировать его маску и т.д. Конечно, при записи экшена эти операции придется прописывать «вслепую», но вы же и так знаете, что хотите сделать, когда садитесь писать сценарий.

Проблема № 7. Что делать, если вновь созданный слой оказался не самым верхним, а лежит внутри существующей структуры слоев.

Обычно экшен должен создать некоторую дополнительную структуру поверх уже существующих слоев. Это вытекает из логики работы: доработать имеющееся изображение. Но далеко не всегда пользователь запускает экшен при активном верхнем слое. Активным может оказаться один из лежащих ниже. Таким образом созданные экшеном слои могут оказаться внутри существующей структуры слоев и все пойдет наперекосяк. Про Flatten Image, надеюсь, больше пояснять не надо.

Решение проблемы № 7

Технически решение описано в проблеме №3: после создания слоя вставьте команду Bring to Front и слой всплывет на самый верх. Почему я еще раз обратил на это внимание? Потому что в данном случае это не проблема не команд, а действий будущего пользователя. А хороший экшен должен учитывать и те неприятности, которые может преподнести потребитель.

Проблема № 8. Всплывая, слой упирается в границу группы.

Как следствие предыдущей возникает неявная и известная немногим проблема: если слой заключен в группу, то команда Bring to Front поднимет его на самую верхнюю позицию, но не во всей структуре слоев, а в группе. То есть, всплывая вверх слой упрется в «границу» группы, и сколько бы раз мы не повторяли эту команду, перескочит границу не сможет. Меня на данную проблему в свое время навел Саша Онищенко.

Решение проблемы № 8

Решение волшебно просто: если слой находится на верхней позиции в группе, то поднять его на одну позицию выше и вывести за пределы группы может команда Bring Forward. Чтобы он и дальше всплыл на самый верх можно еще раз отдать команду Bring to Front.

Фотошоп допускает 7 уровней вложения групп слоев друг в друга. Поэтому, если мы хотим гарантировать самое верхнее положение нового слоя (а это нужно чтобы защититься от пользователей, запускающих экшен при случайно выбранном активном слое), после команды его создания надо вставить 7 пар команд Bring to Front и Bring Forward, а потом добавить еще одну команду Bring to Front.

Не пугайтесь, экшен не станет от этого работать медленнее. Лишние при конкретной структуре слоев команды он просто пропустит. Зато вы будете уверены, что даже самый «творческий» пользователь не загубит вашу работу.

Проблема № 9. Как спозиционировать содержимое слоя относительно определенных границ.

Чаще всего такой вопрос возникает когда на изображение нужно поставить копирайт (водяной знак и т.п.), поэтому линиями к которым идет привязка выступают или границы изображения или центральные (по вертикали и горизонтали) линии. Поэтому задачу можно сформулировать так: как поставить подпись с отступом N правого нижнего (например) угла?

Решение проблемы № 9

Если на экране существуют активное выделение, то команды выравнивания слоев Layer -> Align превращаются в команды выравнивания слоев по границам активного выделения Layer -> Align Layers to Selection (спасибо за подсказку Александру Серакову). А чтобы получить выделение соответствующее границам документа нужно просто отдать команду Select -> All («Cmd»+«A»).

Но это только половина решения, нам же нужно отодвинуть надпись от края. Первый вариант: после выравнивания дополнительно отдать команду Edit -> Free Transform («Cmd»+«T») и нажав в палитре Options кнопку с треугольником между первыми числовыми полями (Use relative positioning for reference point) задать в них необходимое смещение.

Второй вариант подойдет, если отступ от краем должен быть одинаковый. Перед выравниванием нужно просто сжать выделение (Select -> Modify -> Contract) на заданное количество пикселей. Кстати, предварительная трансформация выделения через команды Select -> Transform Selection будет очень кстати, если позицию надо найти относительно имеющихся размеров изображения. Например: отступить на одну треть от левого края и на одну десятую от верхнего.

В качестве заключения

Вы можете спросить, а как же картинка? Где она? Там где и положено: в анонсе, для привлечения внимания. Хорошее описание должно читаться само по себе, иллюстрации не основа, а лишь сопровождение рассказа. Заодно и проверю, хорошее ли описание у меня получилось.

Но чтобы не было слишком грустно замечу, в следующий раз иллюстраций будет много, поскольку мы на практике начнем разбирать применение описанных выше приемов. А теория - она и есть теория. Сухая, не интересная, «без картинок». Но нужно сначала разобраться с ней, чтобы потом практика пошла легко.

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

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

Для коммерческого использования или перепечатки с внесением изменений необходимо согласование с автором. Связаться со мной можно по электронной почте zhur74@livejournal.com

© Андрей Журавлев (aka zhur74), июль 2013 г.
Первая публикаци http://zhur74.livejournal.com/52100.html

Теория, action

Previous post Next post
Up