jpg img data64 data convert b64 html5 canvas png base64

img - Datos PNG Base64 para lienzo HTML5



png image to base64 (2)

Quiero cargar una imagen PNG codificada en Base64 al elemento canvas. Tengo este código:

<html> <head> </head> <body> <canvas id="c"></canvas> <script type="text/javascript"> var canvas = document.getElementById("c"); var ctx = canvas.getContext("2d"); data = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oMCRUiMrIBQVkAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADElEQVQI12NgoC4AAABQAAEiE+h1AAAAAElFTkSuQmCC"; ctx.drawImage(data, 0, 0); </script> </body> </html>

En Chrome 8 me aparece el error: Uncaught TypeError: Type error : Uncaught TypeError: Type error

Y en Firebug de Firefox esto: "El tipo de un objeto es incompatible con el tipo esperado del parámetro asociado al objeto" código: "17"

En esa base64 hay 5x5px black PNG square que hice en GIMP y lo cambio a base64 en el programa base64 de GNU / Linux.


La respuesta de Jerryf está bien, excepto por un defecto.

El evento de carga debe establecerse antes del src. A veces, el src se puede cargar al instante y nunca desencadenar el evento de carga.

(Como Totty.js señaló).

var canvas = document.getElementById("c"); var ctx = canvas.getContext("2d"); var image = new Image(); image.onload = function() { ctx.drawImage(image, 0, 0); }; image.src = "data:image/ png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oMCRUiMrIBQVkAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADElEQVQI12NgoC4AAABQAAEiE+h1AAAAAElFTkSuQmCC";


Por lo que se ve, necesitas pasar a drawImage un objeto de imagen como ese

var canvas = document.getElementById("c"); var ctx = canvas.getContext("2d"); var image = new Image(); image.onload = function() { ctx.drawImage(image, 0, 0); }; image.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oMCRUiMrIBQVkAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADElEQVQI12NgoC4AAABQAAEiE+h1AAAAAElFTkSuQmCC";

<canvas id="c"></canvas>

Lo probé en Chrome y funciona bien.