По умолчанию, если объект (источник) нарисован поверх другого объекта (цели) в Canvas, браузер просто наложит изображение исходного объекта поверх изображения целевого объекта.
Проще говоря, в Canvas, объединив исходное изображение и целевое изображение с помощью операции globalCompositeOperation в Canvas, вы можете получить различные эффекты, такие как следующий рисунок:
Как показано на рисунке выше, красное яблоко и черный круг превращаются в надкушенное красное яблоко через destination-out globalCompositeOperation . Другими словами, посредством синтеза изображений в Canvas мы можем добиться некоторых уникальных эффектов, например, создать эффект лотереи скретч-карт. Сегодня мы научимся использовать синтез изображений в Canvas.
Всего в Canvas имеется 26 типов значений атрибута globalCompositeOperation . Каждый тип будет создавать разные эффекты. Конечно, вы можете заметить, что эффекты будут разными, и некоторые эффекты могут не отображаться нормально в браузере. Но это не имеет значения, давайте просто разберемся в значениях и эффектах этих 26 типов.
ctx.save(); ctx.translate(w/2, h/2); ctx.fillStyle = 'красный'; ctx.beginPath(); ctx.arc(-40, 20, 80, 0, Math.PI * 2, правда); ctx.closePath(); ctx.fill();
Приведенный выше код нарисует красный круг радиусом 80px на холсте Canvas, который здесь называется источником изображения.
ctx.fillStyle = 'оранжевый'; ctx.beginPath(); ctx.arc(40, 20, 80, 0, Math.PI * 2, true); ctx.fill(); ();
Этот код нарисует оранжевый круг радиусом 80px на холсте Canvas, который здесь называется целью изображения. Установив значение globalCompositeOperation между источником изображения и целевым изображением, можно завершить операцию синтеза изображения:
ctx.save(); ctx.translate(w/2, h/2); ctx.fillStyle = 'красный'; ctx.beginPath(); ctx.arc(-40, 20, 80, 0, Math.PI * 2, правда); ctx.closePath(); ctx.fill(); ctx.globalCompositeOperation = 'source-in'; ctx.fillStyle = 'orange'; ctx.beginPath(); ctx.arc(40, 20, 80, 0, Math.PI * 2, true); ctx.closePath(); (); ctx.восстановить();
Эффект, полученный на данный момент, следующий:
исходный код source-over — это значение по умолчанию свойства globalCompositeOperation . Исходное изображение закрывает целевое изображение. Исходное изображение отображается в непрозрачных частях исходного изображения, а целевое изображение отображается в остальных.
source-in : рисуются только те части целевого изображения и исходного изображения, которые перекрываются и являются непрозрачными.
source-out : будет нарисована непересекающаяся часть целевого изображения и исходного изображения.
source-atop : будет отрисована целевая графика в перекрывающейся части содержимого целевой графики и исходной графики.
destination-over : будет нарисована конечная графика позади целевой графики и исходного графического содержимого.
destination-in : перекрывающаяся часть конечного изображения и исходного изображения будет сохранена (исходное изображение), а остальная часть будет отображаться прозрачно.
Остальные не будут отображаться по одному. Конкретное описание, соответствующее каждому значению, можно найти здесь.
В сочетании с globalAlpha для управления операциями синтеза изображений. В Canvas есть два свойства globalAlpha и globalCompositeOperation для управления операциями синтеза изображений:
globalAlpha : установите прозрачность изображения. Свойство globalAlpha по умолчанию имеет значение 1 , что указывает на полную непрозрачность, и может быть установлено от 0 (полностью прозрачно) до 1 (полностью непрозрачно). Это значение должно быть установлено до построения графика.globalCompositeOperation : значение этого атрибута управляет отрисовкой графики в текущем растровом изображении Canvas после того, как globalAlpha и все преобразования вступили в силу.В нашей повседневной работе мы часто видим эффекты лотереи, такие как скретч-карты. Если мы используем для этого Canvas, мы будем использовать синтез изображений Canvas.
<div id=card> <canvas id=canvasOne width=500 height=300></canvas> </div>
Мы отображаем приз (если это изображение) в качестве фона div#card . Затем сначала нарисуйте серый прямоугольник (исходное изображение) в Canvas, затем динамически нарисуйте новое изображение с помощью событий мыши (или событий касания) (это похоже на кисть) и установите значение атрибута globalCompositeOperation на destination-out (новое draw Непересекающиеся части графики и графическое содержимое, уже существующее на целевом холсте, будут сохранены). Если стирание кисти превышает определенную пропорцию, удалите элемент <canvas> или используйте clearRect() , чтобы очистить холст Canvas. чтобы показать фон div
В этой статье мы в основном знакомим с синтезом изображений Canvas. В Canvas операцией синтеза изображений можно управлять с помощью двух атрибутов, globalAlpha и globalCompositeOperation, для достижения эффекта синтеза изображений. Я надеюсь, что это будет полезно для обучения каждого, а также надеюсь, что все поддержат сеть VeVb Wulin.