Quiero cargar una imagen PNG codificada en Base64 al elemento canvas. Tengo este codigo:
<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 aparece el 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 un cuadrado PNG negro de 5x5px que hice en GIMP y lo cambié a base64 en el programa base64 de GNU / Linux.
src
, porque se supone que debes usar laonload
devolución de llamada para asegurarte de que la imagen haya terminado de cargarse. El 50% de mis pruebas fallaron porque la imagen no se había terminado de cargar.ctx.drawImage(this,0,0);
garantizar que la variable de imagen se refiera a la imagen correcta. ¡Sin embargo, gran respuesta!data:image/
longitud es grande, obtendremos414 (Request-URI Too Long
La respuesta de Jerryf está bien, excepto por un defecto.
(Como señaló Totty.js).
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";
fuente
onload
antessrc
... Yo lo hago por hábito.