Je souhaite charger une image PNG encodée en Base64 dans un élément canvas. J'ai ce code:
<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>
Dans Chrome 8, j'obtiens l'erreur: Uncaught TypeError: Type error
Et dans Firebug de Firefox ceci: "Le type d'un objet est incompatible avec le type attendu du paramètre associé à l'objet" code: "17"
Dans cette base64 se trouve un carré PNG noir de 5x5px que j'ai créé dans GIMP et le transforme en base64 dans le programme base64 de GNU / Linux.
src
, car vous êtes censé utiliser leonload
rappel pour vous assurer que le chargement de l'image est terminé. 50% de mes tests ont échoué car l'image n'a pas fini de se charger.ctx.drawImage(this,0,0);
qu'il s'assure que la variable d'image se réfère à l'image correcte. Excellente réponse cependant!data:image/
longueur est grande, nous obtiendrons414 (Request-URI Too Long
La réponse de Jerryf est bonne, à l'exception d'un défaut.
(Comme Totty.js l'a souligné.)
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";
la source
onload
avantsrc
... Je prends l'habitude de le faire.