#javascript #jquery #html #css #canvas
#javascript #jquery #HTML #css #холст
Вопрос:
я пытаюсь создать ссылку для скачивания для моего изображения после того, как изображение повернется после нажатия на него, затем вы нажмете загрузить, чтобы получить новое измененное изображение, спасибо ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Flipping photo in a canvas tag</title>
<style>
#canvas {cursor: pointer;}
canvas {
height: 50vh;
}
</style>
</head>
<body>
<label>Image File:</label><br/>
<input type="file" id="imageLoader" name="imageLoader"/>
<h1>Example of using <code>amp;<canvasamp;></code></h1>
<p>This example shows how a photo is loaded in a <code>amp;<canvasamp;></code> tag
and then flipped.</p>
<p>Click on the photo to flip (provided, of course, that your browser supports <code>amp;<canvasamp;></code>)</p>
<canvas id="canvas" style="border:1px red solid;"></canvas>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript">
var imageLoader = document.getElementById('imageLoader');
imageLoader.addEventListener('change', handleImage, false);
var can = document.getElementById('canvas');
var ctx = can.getContext('2d');
var img = new Image();
function handleImage(e){
var reader = new FileReader();
reader.onload = function(event){
img.onload = function(){
can.width = img.width;
can.height = img.height;
ctx.drawImage(img, 0, 0, img.width, img.height);
ctx.save();
}
img.src = event.target.result;
}
reader.readAsDataURL(e.target.files[0]);
}
can.onclick = function() {
console.log('here');
ctx.translate(img.width-1, img.height-1);
ctx.rotate(Math.PI);
ctx.drawImage(img, 0, 0, img.width, img.height);
};
</script>
<p><a href="http://www.phpied.com/photo-canvas-tag-flip/">Blog post is here</a></p>
</body>
</html>
Ответ №1:
Если вы преобразуете холст в URL-адрес данных, вы можете затем добавить это в качестве атрибута href к элементу link с атрибутом download.
HTML:
<canvas id="canvas"></canvas>
<a download="new-image.png" id="download">Download</a>
Javascript:
var canvas = document.getElementById('canvas');
var button = document.getElementById('download');
button.setAttribute( 'href', canvas.toDataURL('image/png', 1) )
Рабочий пример:https://jsfiddle.net/x867ycek
Ответ №2:
Вы можете попробовать это, только имейте в виду, что не все браузеры поддерживают canvas.toBlob().
Передайте переменную canvas can
из вашего кода.
function downloadAsFile( canvas, imagename, mime ) {
mime = mime || 'image/png';
imagename = imagename || 'canvasImage.png';
canvas.toBlob( blob => {
if ( window.navigator.msSaveBlob ) { // IE and Edge
window.navigator.msSaveBlob( blob, imagename );
}
else { // Chrome, Firefox. Not tested: Safari
const url = window.URL.createObjectURL( blob );
const a = document.createElement( 'a' );
document.body.appendChild( a );
a.href = url;
a.download = imagename;
a.setAttribute( 'style', 'display:none;' );
a.click();
setTimeout( () => {
window.URL.revokeObjectURL( url );
document.body.removeChild( a );
}, 2000);
}
}, mime );
}