Загрузите элемент холста Html5 как изображение с расширением файла с помощью Javascript
Я хотел бы иметь возможность загрузить элемент холста Html5 в виде изображения с расширением файла с помощью Javascript.
Библиотека CanvasToImage, похоже, не может этого достичь.
Вот мой код, который вы видите на этом JsFiddle.
<div id="canvas_container">
</div>
<p>
<a href='#' id="create_image">create</a>
<a href="#" id="download_image">download</a>
</p>
$("#create_image").click(function() {
var cnvs = createSmileyOnCanvas();
$('#canvas_container').append(cnvs);
});
$("#download_image").click(function() {
var img = $('#smiley_canvas').toDataURL("image/png");
var uriContent = "data:application/octet-stream," + encodeURIComponent(img);
window.open(uriContent, 'download smiley image');
});
function createSmileyOnCanvas() {
var canvas = document.createElement('canvas');
canvas.id = 'smiley_canvas';
var ctx = canvas.getContext('2d');
// Draw shapes
ctx.beginPath();
ctx.arc(75,75,50,0,Math.PI*2,true); // Outer circle
ctx.moveTo(110,75);
ctx.arc(75,75,35,0,Math.PI,false); // Mouth
ctx.moveTo(65,65);
ctx.arc(60,65,5,0,Math.PI*2,true); // Left eye
ctx.moveTo(95,65);
ctx.arc(90,65,5,0,Math.PI*2,true); // Right eye
ctx.stroke();
return canvas;
}
Ответы
Ответ 1
Чтобы заставить/предложить имя файла в диалоговом окне загрузки браузера, вам нужно отправить заголовок Content-Disposition: attachment; filename=foobar.png
.
Это невозможно сделать с помощью window.open
, так что вам не повезло, если для этого не существует некоторых браузеров.
Если вам действительно нужно имя файла, вы можете попробовать использовать новый атрибут загрузки в a
, <a href="put stuff here" download="filename here">
. Тем не менее, он не очень широко поддерживается.
Другой альтернативой было бы сначала отправить данные на сервер с помощью ajax, а затем перенаправить браузер на некоторую серверную сторону script, которая затем будет обслуживать данные с правильным заголовком.
Ответ 2
Кажется, это работает для меня:
<a id="downloadImgLink" onclick="$('#downloadImgLink').attr('href', canvas.toDataURL());" download="MyImage.png" href="#" target="_blank">Download Drawing</a>
Ответ 3
Привет, я создал плагин jquery, который позволит вам сделать ту же задачу с легкостью, но также использовать php для загрузки изображения. позвольте мне объяснить, как это работает.
Плагин имеет 2 подфункции, которые вы можете самостоятельно вызвать для добавления изображения на холст, а другой - для загрузки текущего изображения, лежащего на холсте.
Добавить изображение на холст
Для этого вам необходимо передать идентификатор элемента canvas и путь к изображению, которое вы хотите добавить
скачать изображение с холста
Для этого вам нужно передать идентификатор элемента canvas
$('body').CanvasToPhp.upload({
canvasId: "canvas", // passing the canvasId
image: "455.jpg" // passing the image path
});
// downloading file
$('#download').click(function(){
$('body').CanvasToPhp.download({
canvasId: "canvas" // passing the canvas id
}); //
});
Сначала вам нужно скачать файл плагина, который вы можете найти здесь http://www.thetutlage.com/post=TUT213
Я также создал небольшую демонстрацию http://thetutlage.com/demo/canvasImageDownload