75 уроков по Photoshop на русском языке

         

Применение элементов перехода Lingo


Элементы перехода Lingo это 8-битовые изображения. Разрешите мне также отметить, что в Lingo говорится "оттенки серого" (grayscale), но мне, как фотографу, хочется пользоваться терминологией Kodak. Для получения лучшего результата изображение должно содержать весь диапазон. Это значит 256 оттенков серого. Переход "водоворот" (swirl transition) в примере-клипе отлично показывает это.

Если вы запустите этот клип, вы заметите, что переход "водоворот" оживает, хотя элемент перехода Lingo, описанный выше, представляет собой всего-навсего одну картинку в оттенках серого. Как же такое произошло?

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

Вот только часть перехода в процессе, причем произведенная благодаря простому участку кода.

imageObject.createMatte (alphaThreshold)

Весь код перехода построен вокруг приручения этого мощного зверя. Итак, что же он делает?

Вспомните, что элементы перехода Lingo являются изображениями в оттенках серого с 256 градациями. На картинке сверху, однако, вы видите, что часть оттенков отсутствует, так что некоторые участки изображения представляют собой области белого или черного. То, что вы видите, является копией элементов перехода Lingo, модифицированных параметром alphaThreshold приведенного выше Lingo. Значение alphaThreshold может быть в диапазоне от 0 до 255 (256 градаций от белого к черному, соответственно). Если вы зададите значение alphaThreshold, равное 128 (50% серого), то любое большее значение оттенка превращается в черное, а любое меньшее становится белым. Если вы последовательно будете увеличивать значение alphaThreshold, вы получите серию картинок, где соотношение черного к белому изменяется как показано на приведенном выше изображении; белая область выглядит растущей пропорционально уменьшению значения alphaThreshold . Более того, форма белой области связана с изображением в оттенках серого, которое используется для перехода.


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

Давайте исследуем немного исходного кода для того, чтобы выяснить, как он работает.

Мы начнем с двух 8-битовых изображений использующих палитру оттенков серого. Первое - это черное изображение, второе - белое для копирования поверх черного. Нам также понадобится 32-битовое изображение для хранения изображения элемента перехода Lingo в качестве альфа-канала. Эти три изображения созданы следующим образом:

Основное изображение - черное 8-битовое, переменная типа image с именем Trans_Mask. Это изображение, которое будет изменено, а затем использовано в качестве маски для перехода. Начинаем с черного, так как изображение, которое мы собираемся замаскировать должно быть полностью видимым в начале процесса. Переменные mywidth и myheight являются константами везде по тексту.

Trans_mask = image (mywidth, myheight, 8, #grayscale)
Trans_mask.fill (Trans_mask.rect, paletteIndex (255))

White_image это белое 8-битовое изображение, переменная соответствующего типа для копирования в Mask_image. Его мы будем применять для копирования белых (прозрачных) областей на маску. Размер и форма белой области, которая будет скопирована, будут определены параметром createMatte метода copyPixels.



White_image = image (mywidth,myheight, 8, #grayscale) 
White_image.fill (White_image.rect, paletteIndex (0)) 

Alpha_trans является 32-битовым изображением (24 бита и альфа-канал), которое активируется в третьей строке кода.

Alpha_trans = image (mywidth, myheight, 32)
Alpha_trans.fill (Alpha_trans.rect, rgb (0, 0, 0))
Alpha_trans.useAlpha = true

Alpha_trans необходим для хранения изображения элемента перехода Lingo (myTransition) в качестве информации о альфа-канале с целью модификации ее методом createMatte. Мы можем присвоить маску любому 32-битовому изображению простым заданием его альфа-канала с помощью изображения в оттенках серого или просто значением серого. Установим альфа-канал изображению элемента перехода Lingo, пользуясь методом copyPixel для того, чтобы быть уверенными, что результирующий альфа-канал имеет такой же размер, как и изображение, которое мы будем им маскировать.



tmp_Image = image (mywidth,myheight, 8, #grayscale)
tmp_Image.copypixels (member (myTransition).image, tmp_Image.rect, member(myTransition).image.rect)

Alpha_trans.setAlpha (tmp_Image)

Имейте ввиду, это еще не маска перехода сама по себе. Это маска, которая будет модифицирована в методе copyPixels параметром alphaThreshold. Задавая alphaThreshold, модифицируем маску так, чтобы она не имела оттенков серого.

Для создания маски для перехода мы должны скопировать области из White_image в Trans_mask. Применяя альфа-канал переменной Alpha_trans для параметра maskImage мы можем точно определить, какая часть из White_image будет скопирована поверх. Вот здесь-то параметр alphaThreshold и вступает в игру.

Trans_mask.copyPixels (White_image, Trans_mask.rect, White_image.rect, [#maskImage: Alpha_trans.createMatte (alphaThreshold)]) 



Изменения в alphaThreshold изменяют параметр maskImage, который применяется в методе copyPixels, как это показано выше. Результат изменения alphaThreshold в виде последовательности с использованием элемента перехода Lingo типа водоворот в альфа-канале можно увидеть на рисунке в начале этого раздела.

Параметр alphaThreshold может принимать любые значения от 0 до 255. Следовательно, мы можем создать максимально 256 шагов для любого элемента перехода, имеющего 256 оттенков серого. Поскольку изменение маски изображения зачастую процесс длительный, вы, возможно захотите пропустить несколько шагов. Следующие строки создают список значений alphaThreshold с интервалами, определенными параметром mySpeed. Меньшие шаги означают более быстрые переходы.

stepList = []
mythreshold = 255

repeat while mythreshold > 0
  mythreshold = mythreshold - (mySpeed)
  stepList.add (mythreshold) 
end repeat

Перевод: ArtLogic
Источник: director-online.com

Содержание раздела