#javascript #html #jquery #css
Вопрос:
я пытался загрузить контекст холста в виде изображения с помощью dataURL() с помощью следующего кода, но по какой-то причине он не работает. Однако, когда я заменяю контекст холста чем-то другим, кроме изображения, это действительно работает, так что можете ли вы сказать, как я могу это исправить
<a href="#" id="downloader" >Download!</a>
<canvas id="canvas"></canvas>
<script>
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var image = new Image(60, 45);
image.onload = function () {
ctx.clearRect(0, 0, canvas.width, canvas.height);
canvas.width = image.naturalWidth;
canvas.height = image.naturalHeight;
ctx.drawImage(image, 0, -60);
}
image.src = 'image.png';
$('#downloader').click(function(){
$(this).attr('href', document.getElementById('canvas').toDataURL("image/png").replace("image/png", "image/octet-stream"));
$(this).attr('download', "Picture.png");
});
</script>
Комментарии:
1. Что говорит консоль javascript? (Ctrl-Shit-I открывает инструменты разработки в Chrome-не уверен в других) Звучит так, как будто вы используете изображение, но не используете сервер локального хоста (URL — адрес страницы будет начинаться с файла:/// если это так) Если это будет проблема перекрестного происхождения, то консоль сообщит вам, в чем заключается ошибка. 😉
2. «Неперехваченное исключение DOMException: Не удалось выполнить «toDataURL» на «HTMLCanvasElement»: Испорченные полотна не могут быть экспортированы». вот какую ошибку я получаю. однако на самом деле я не запускаю код на сервере локального хоста, поэтому я попытаюсь запустить его и посмотрю, была ли в этом проблема
3. большое вам спасибо, действительно, в этом и была проблема. теперь это работает!
4. рок-н-ролл.. Похоже, у тебя тоже есть новый набор игрушек, с которыми можно поиграть. Наслаждайтесь инструментами разработки. 🙂
Ответ №1:
Ваш JS должен быть:
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var image = new Image(60, 45);
//First add src, then set the height and width
image.src = 'image.png';
image.onload = function() {
canvas.width = image.width;
canvas.height = image.height;
// Draw image from start and not from behind the axis
ctx.drawImage(image, 0, 0);
}
$('#downloader').click(function() {
$(this).attr('href', document.getElementById('canvas').toDataURL("image/png"))
$(this).attr('download', "Picture.png");
});