Quero carregar uma imagem PNG codificada em Base64 para o elemento canvas. Eu tenho 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>
No Chrome 8, recebo o erro: Uncaught TypeError: Type error
E no Firebug do Firefox isto: "O tipo de um objeto é incompatível com o tipo esperado do parâmetro associado ao objeto" código: "17"
Nessa base64 está um quadrado PNG preto de 5x5px que fiz no GIMP e transformo-o em base64 no programa base64 do GNU / Linux.
src
, porque você deve usar oonload
retorno de chamada para garantir que a imagem tenha terminado de carregar. 50% dos meus testes falharam porque a imagem não terminou de carregar.ctx.drawImage(this,0,0);
modo que garanta que a variável de imagem se refere à imagem correta. Ótima resposta!data:image/
comprimento for grande, teremos414 (Request-URI Too Long
A resposta de Jerryf é boa, exceto por uma falha.
(Como Totty.js apontou.)
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";
fonte
onload
antessrc
... Tenho o hábito de fazê-lo.