Я хочу загрузить изображение PNG, закодированное в Base64, в элемент холста. У меня есть такой код:
<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>
В Chrome 8 появляется ошибка: Uncaught TypeError: Type error
А в Firebug Firefox это: «Тип объекта несовместим с ожидаемым типом параметра, связанного с объектом» code: «17»
В этом base64 находится черный квадрат PNG размером 5x5px, который я создал в GIMP и превратил его в base64 в программе base64 GNU / Linux.
src
, потому что вы должны использоватьonload
обратный вызов, чтобы гарантировать, что изображение завершило загрузку. 50% моих тестов не прошли, потому что изображение еще не загрузилось.ctx.drawImage(this,0,0);
чтобы переменная изображения ссылалась на правильное изображение. Хотя отличный ответ!data:image/
длина будет большой, мы получим414 (Request-URI Too Long
Ответ Джеррифа хорош, за исключением одного недостатка.
(Как указал 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";
источник
onload
раньшеsrc
... Я делаю это привычкой.