Combinar trazados
globalCompositeOperation

facebook-svg gplus-svg twitter-svg

Para combinar trazados en el <canvas> podemos utilizar la propiedad globalCompositeOperation. Esta propiedad define la apariencia de nuevos trazados, y como estos afectan o están afectados por los trazados ya existentes en el <canvas>.
Para combinar trazados la propiedad globalCompositeOperation puede tomar 12 valores diferentes. ( También podemos utilizar la propiedad globalCompositeOperation para fusionar dos capas en canvas. )

Lea más acerca de los modos de fusión ( blend modes ) en <canvas>.

Su navegador no soporta canvas :( Su navegador no soporta canvas :( Su navegador no soporta canvas :( Su navegador no soporta canvas :( Su navegador no soporta canvas :( Su navegador no soporta canvas :( Su navegador no soporta canvas :( Su navegador no soporta canvas :( Su navegador no soporta canvas :( Su navegador no soporta canvas :( Su navegador no soporta canvas :( Su navegador no soporta canvas :(

Un poco de inglés

Podemos traducir destination image ( la imagen azul de los ejemplos anteriores ) como imagen de destino y representa la imagen ya existente en el <canvas> cuando empezamos a dibujar el nuevo trazado.
Por ejemplo cuando el valor de la propiedad globalCompositeOperation = "destination-over" quiere decir que la imagen de destino, o la imagen existente está encima ( over ) de la nueva imagen.

Podemos traducir source image ( la imagen anaranjada de los ejemplos anteriores ) como imagen de origen o imagen fuente y representa la nueva imagen que dibujaremos en el <canvas>.
Por tanto cuando el valor de la propiedad globalCompositeOperation = "source-over" quiere decir que la imagen de origen, o la nueva imagen está encima ( over ) de la imagen de destino.

Valor Descripcion
source-over Valor por defecto. La nueva imagen ( source ) aparece ENCIMA de la imagen existente ( destination ).
source-in La nueva imagen ( source ) aparece SOLO ENCIMA de la imagen existente ( destination ),
mientras que la imagen existente vuelve transparente.
source-out La nueva imagen ( source ) aparece solo AL EXTERIOR de la imagen existente ( destination ), mientras que la imagen existente vuelve transparente.
source-atop La nueva imagen ( source ) aparece SOLO ENCIMA de la imagen existente ( destination ).
destination-over La imagen existente( destination ) aparece ENCIMA de la nueva imagen ( source ).
destination-atop La imagen existente( destination ) aparece SOLO ENCIMA de la nueva imagen ( source ).
destination-in La imagen existente ( destination ), aparece SOLO ENCIMA de la nueva imagen ( source )
mientras que la nueva imagen ( source ) vuelve transparente.
destination-out La imagen existente ( destination ), aparece solo AL EXTERIOR de la nueva imagen ( source ) mientras que la nueva imagen vuelve transparente.
lighter La intersección de las dos imágenes más clara.
darker La intersección de las dos imágenes más oscura.
copy Solo la nueva imagen ( source ) está visible, mientras que la imagen existente ( destination ), es ignorada.
xor La nueva imagen ( source ) se combina con la imagen existente ( destination ) utilizando una disyunción exclusiva (exclusive or).

Vea la chuleta con las propiedades y metodos() de canvas.

Un ejemplo fácil con "xor"

A continuación superpondremos dos rectángulos que combinamos con globalCompositeOperation = "xor".

Su navegador no soporta canvas :( 

		var canvas = document.getElementById("lienzo1");
		if (canvas && canvas.getContext) {
		var ctx = canvas.getContext("2d");
			if (ctx) {
				var x=80, y=15, w=75, h=75, color = "#0000ff";
				var x1=95, y1=40, w1=75, h1=75, color1 = "#ff6400";
				
				ctx.globalCompositeOperation = "xor";
				
				ctx.fillStyle = color;
				ctx.fillRect(x,y,w,h);
				ctx.fillStyle = color1;
				ctx.fillRect(x1,y1,w1,h1);
				}
		}
Su navegador no soporta canvas :(

Otro ejemplo con "destination-out"

En el siguiente ejemplo el <canvas> tiene una imagen de fondo asignada con el CSS. Después de haber dibujado un rectángulo, utilizaremos el método globalCompositeOperation = "destination-out" para borrar parte de este.

Su navegador no soporta canvas :( 

var canvas1 = document.getElementById("lienzo2");
		if (canvas1 && canvas1.getContext) {
		var ctx1 = canvas1.getContext("2d");
			if (ctx1) {
				ctx1.beginPath();
				ctx1.fillStyle = "#6a50b1";
				ctx1.fillRect(50, 40, 150, 120);
				ctx1.globalCompositeOperation = "destination-out";
				ctx1.fillRect(70, 60, 110, 60);
			 }
  }
Su navegador no soporta canvas :(

Más acerca de globalCompositeOperation en canvas