Imágenes reflejadas
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.