Chcę załadować obraz PNG zakodowany w Base64 do elementu Canvas. Mam ten kod:
<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>
W Chrome 8 pojawia się błąd: Uncaught TypeError: Type error
A w Firebug Firefoksa to: „Typ obiektu jest niezgodny z oczekiwanym typem parametru skojarzonego z obiektem” kod: „17”
W tym base64 jest czarny kwadrat PNG o wymiarach 5x5px, który utworzyłem w GIMP i zamieniłem go na base64 w programie base64 GNU / Linuksa.
src
, ponieważ powinieneś użyćonload
wywołania zwrotnego, aby upewnić się, że obraz został załadowany. 50% moich testów zakończyło się niepowodzeniem, ponieważ ładowanie obrazu nie zostało zakończone.ctx.drawImage(this,0,0);
aby zapewnić, że zmienna obrazu odwołuje się do właściwego obrazu. Świetna odpowiedź!data:image/
długość jest duża, otrzymamy414 (Request-URI Too Long
Odpowiedź Jerryfa jest w porządku, z wyjątkiem jednej wady.
(Jak wskazał 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";
źródło
onload
wcześniejsrc
... Robię to nawykiem.