Exportar el contenido de un Canvas HTML5 a una imagen

11/Sep/2012 HTML5 , , , 1 Comentario

Los Canvas de HTML5 nos permiten una fácil manipulación gráfica. De tal manera que es sencillo insertar en ellos elementos gráficos, textos, imágenes,... Pero además nos ofrecen la posibilidad de exportar todo el contenido en formato imagen.

Para ello lo primero que vamos a hacer generar un Canvas con algo de contenido:

  1. var canvas = document.getElementById("micanvas");
  2. var ctx = canvas.getContext("2d");
  3.  
  4. // Dibujamos algo sencillo en el Canvas para exportarlo
  5. ctx.fillStyle = "rgb(255,0,0)";
  6. ctx.fillRect(20,20,100,100);
  7.  
  8. ctx.fillStyle = "rgb(0,255,0)";
  9. ctx.fillRect(60,60,140,140);
  10.  
  11. ctx.fillStyle = "rgb(0,0,255)";
  12. ctx.fillRect(100,100,180,180);

Ya hemos añadido unos cuadrados sobre el lienzo del Canvas. Ahora, la idea es exportar el contenido del canvas sobre un elemento IMG de la página. Para ello nos vamos a dotar de dos botones: uno que exporte a PNG y otro que exporte a JPEG, así como del elemento IMG.

  1. <fieldset><legend>Pulsa sobre el tipo de imagen y el resultado se generará abajo</legend><button id="png">Generar PNG</button> | <button id="jpeg">Generar JPEG</button><br/>
  2. </fieldset>
  3.  
  4. <img src="" id="laimagen"/>

Lo que haremos será capturar el click sobre el botón y exportar la imagen. Recordar que para atender al evento click del botón tenemos que añadirle un EventListener.

  1. var png = document.getElementById("png");
  2. png.addEventListener("click",function(){
  3. // Exportar la imagen
  4. },false);

Para exportar la imagen recurrimos al método .toDataURL() del Canvas. Dicho método recibe como parámetro el mimetype de la imagen que queremos generar. Es decir, un "image/png" o un "image/jpeg".

Lo siguiente que haremos será coger su resultado, que es un base64, y asignarlo a la propiedad src de la imagen.

  1. var img = document.getElementById("laimagen");
  2.  
  3. var png = document.getElementById("png");
  4. png.addEventListener("click",function(){
  5. img.src = canvas.toDataURL("image/png");
  6. },false);

A la hora de exportar el contenido del Canvas a una imagen hay que tener en cuenta un tema de seguridad. Y es que si el Canvas tiene imágenes, estas deberán de estar en el mismo servidor que el fichero que contenga el Canvas. En caso contrario saltará una alerta de seguridad al utilizar el método .toDataURL().

Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D