JavaScript. Подробное руководство, 6-е издание, стр. 364

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

<b>globalAlpha</b>
. Значение альфа-канала каждого пиксела, рисуемого вами, будет умножаться на значение свойства
<b>globalAlpha</b>
. По умолчанию это свойство имеет значение 1 и не добавляет прозрачности. Если свойству
<b>globalAlpha</b>
присвоить значение 0, все нарисованное вами станет полностью прозрачным и на холсте ничего не будет видно. Если присвоить этому свойству значение 0.5, непрозрачные пикселы станут наполовину прозрачными. А пикселы, степень непрозрачности которых была равна 50%, станут непрозрачными на 25%. Изменение значения свойства
<b>globalAlpha</b>
оказывает влияние на степень непрозрачности всех пикселов, поэтому вам, вероятно, потребуется учесть, как эти пикселы объединяются (или «составляются») с пикселами, поверх которых они нарисованы - режимы объединения, поддерживаемые объектом Canvas, описываются в разделе 21.4.13.

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

JavaScript. Подробное руководство, 6-е издание - i_062.jpg

Чтобы выполнить заливку или рисование с применением шаблонного изображения вместо цвета, следует присвоить свойству

<b>fillStyle</b>
или
<b>strokeStyle</b>
объект
<b>CanvasPattern</b>
, возвращаемый методом
<b>createPattern()</b>
объекта контекста:

<b>var image = document.getElementById(&quot;myimage&quot;); </b>

<b>c.fillStyle = c.createPattern(image, &quot;repeat&quot;);</b>

Первый аргумент метода

<b>createPattern()</b>
определяет изображение, которое будет использовано как шаблон. Это должен быть элемент документа
<b>&lt;img&gt;, &lt;canvas&gt;</b>
или
<b>&lt;video&gt;</b>
(или объект
<b>Image</b>
, созданный конструктором
<b>Image()</b>
). Во втором аргументе обычно передается строка «repeat», если требуется повторять изображение при заполнении, независимо от его размера, но можно также использовать значения «repeat-х», «repeat-у» или «по-repeat».

Обратите внимание, что в качестве шаблонного изображения для одного элемента

<b>&lt;canvas&gt;</b>
можно использовать другой элемент
<b>&lt;canvas&gt;</b>
(даже если он не включен в состав документа и невидим на экране):

<b>var offscreen = document.createElement(&quot;canvas&quot;); // Невидимый холст </b>

<b>offscreen.width = offscreen.height = 10; // Установить его размеры</b>

<b>offscreen.getContext(&quot;2d&quot;).strokeRect(0,0,6,6); // Получить контекст</b>

<b>                                                // и нарисовать прямоугольник </b>

<b>var pattern = с.createPattern(offscreen,&quot;repeat&quot;);// И использовать как шаблон</b>

Чтобы выполнить заливку (или нарисовать контур) градиентом, следует присвоить свойству

<b>fillStyle</b>
(или
<b>strokeStyle</b>
) объект
<b>CanvasGradient</b>
, возвращаемый методом
<b>createLinearGradient()</b>
или
<b>createRadialGradient()</b>
объекта контекста. Создание градиентов выполняется в несколько этапов, и в использовании они несколько сложнее, чем шаблонные изображения.

Первый этап - создание объекта

<b>CanvasGradient</b>
. В качестве аргументов методу
<b>сгеateLinearGradient()</b>
передаются координаты двух точек, определяющих линию (она необязательно должна быть горизонтальной или вертикальной), вдоль которой будет изменяться цвет. Аргументы метода
<b>createRadialGradient()</b>
определяют центры и радиусы двух окружностей. (Они необязательно должны быть концентрическими, но первая окружность обычно полностью располагается внутри второй.) Области внутри малой окружности и за пределами большой окружности будут заполняться сплошным цветом, а область между окружностями - градиентом.

После того как объект

<b>CanvasGradient</b>
создан и определены области холста для заливки, необходимо определить цвета градиента вызовом метода
<b>addColorStop()</b>
объекта
<b>CanvasGradient</b>
. В первом аргументе этому методу передается число в диапазоне от 0.0 до 1.0. Во втором - цвет в формате, поддерживаемом CSS. Этот метод должен вызываться как минимум два раза, чтобы определить простой градиент, но его можно вызвать большее число раз. Цвет, соответствующий значению 0.0, будет использоваться в начале градиента, а цвет, соответствующий значению 1.0, - в конце. Если вы решите указать дополнительные цвета, они будут использоваться в промежуточных позициях градиента. В любой другой точке градиента значение цвета будет вычисляться методом интерполяции. Например:

<b>// Линейный градиент, по диагонали холста (предполагается, что преобразования отсутствуют)</b>

<b>var bgfade = с.createLinearGradient(0,0,canvas.width,canvas.height);</b>

<b>bgfade.addColorStop(0.0, &quot;#88f”); // От светло-синего вверху слева</b>

<b>bgfade.addColorStop(1.0, &quot;#fff&quot;); // До белого внизу справа</b>

<b>// Градиент между двумя концентрическими окружностями. Прозрачный в середине</b>

<b>// до полупрозрачного серого и опять до прозрачного,</b>

<b>var peekhole = с.createRadialGradient(300,300,100, 300,300,300);</b>