De canvas a blob

facebook-svg gplus-svg twitter-svg

Un blob es un objeto que almacena datos sin formato y no puede ser modificado ulteriormente.

El método toBlob

EL metodo toBlob() crea un objeto blob que almacena los datos básicos de una imagen contenida en un elemento <canvas>. El método toBlob() puede tomar hasta 3 argumentos:

canvas.toBlob(callback, mimeType, cualidad);

callback: el primer argumento representa una función de retrollamada (callback). Esta función toma como único argumento el blob resultante.

mimeType: argumento opcional que indica el tipo de imagen resultante. El valor por defecto de este argumento es image/png

la cualidad: Exactamente como en el caso de convertToBlob este argumento define la cualidad de la imagen, y puede tomar valores entre 0 y 1 Se utiliza si el type es image/jpeg o image/webp.

El siguiente ejemplo ( adaptado de HTMLCanvasElement.toBlob() ) demuestra cómo crear un ícono .ico utilizando el canvas de HTML5 y el método toBlob().

See the Pen canvas.toBlob by Gabi (@enxaneta) on CodePen.

El método convertToBlob

¡OJO!: El método convertToBlob funciona por ahora solo en Chrome.

Para crear un blob que almacena los datos básicos de una imagen contenida en un elemento <canvas> ( agregado o no al DOM ) podemos utilizar el método convertToBlob

El método convertToBlob toma como argumento un objeto con dos opciones:

  const blob = canvasVirtual.convertToBlob({
  type: "image/jpeg",
  quality: 0.95
  });

type: Define el formato de la imagen resultante. El valor por defecto es image/png.
quality: Define la cualidad de la imagen, y puede tomar valores entre 0 y 1 Se utiliza si el type es image/jpeg o image/webp.

En el siguiente ejemplo voy a crear un elemento canvas virtual ( sin agregar el elemento al DOM). Dentro del canvas voy a dibujar algo: una rosa polar en este caso.
Ulteriormente voy a convertir la imagen del canvas en un blob. Esto devuelve una nueva promesa.  Cuando ya tengo el blob then puedo utilizarlo (let _src = URL.createObjectURL(blob)) como atributo src de una imagen: img.src = _src, o en el CSS como imagen de fondo de un elemento HTML: bg.setAttribute("style",`background-image:url(${_src})`) .

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