Imágenes reflejadas

facebook-svg gplus-svg twitter-svg

Crear una imagen reflejada en canvas es muy fácil. El secreto está en redimensionar el contexto del  canvas para darle la vuelta: ctx.scale(-1,1); pero primero tenemos que trasladar el contexto exactamente dos alturas de imagen (2*this.height). De otra manera el contexto quedará totalmente fuera del lienzo.

ctx.translate(0, 2*this.height);
ctx.scale(-1,1);

Veamos el código:
Primero definimos el canvas c, el contexto ctx y guardamos la anchura y la altura del mismo en dos variables: cw para la anchura y ch para la altura.

var c = document.getElementById("c");
var ctx = c.getContext("2d");
var cw = c.width = 250,cx=cw/2;
var ch = c.height = 358,cy=ch/2;

A continuación necesitamos especificar la imagen que queremos utilizar.

var img = new Image();
// define el valor del atributo src para la nueva imagen
img.src = "lo-que-fuera.jpg";

Las imágenes tardan en cargarse, y aunque esta demora fuera de solo una fracción de segundo, probar a utilizar una imagen inexistente, resultaría en error. Para que esto no pase tenemos que escribir una función anónima que dibuja la imagen con drawImage(), y enlazar esta función como retrollamada ( callback ) al evento onload.

En este caso la palabra clave this se refiere a la nueva imagen.

img.onload = function() {
ctx.drawImage(this, 0, 0);     
ctx.translate(0, 2*this.height);
ctx.scale(1,-1);
ctx.drawImage(this, 0, 0);
}

See the Pen Imagen reflejada by Gabi (@enxaneta) on CodePen.

En el caso que queremos reflejar la imagen horizontalmente, el código tendría este aspecto:

img.onload = function() {
ctx.drawImage(this, 0, 0);
ctx.translate(2*this.width,0);
ctx.scale(-1,1);
ctx.drawImage(this, 0, 0);
}

See the Pen Imagen reflejada by Gabi (@enxaneta) on CodePen.