I would like to draw an image opened with the HTML5 File API on a canvas.
In the handleFiles(e) method, I can access the File with e.target.files[0] but I can’t draw that image directly using drawImage. How do I draw an image from the File API on HTML5 canvas?
Here is the code I have used:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script>
window.onload = function() {
var input = document.getElementById('input');
input.addEventListener('change', handleFiles);
}
function handleFiles(e) {
var ctx = document.getElementById('canvas').getContext('2d');
ctx.drawImage(e.target.files[0], 20,20);
alert('the image is drawn');
}
</script>
</head>
<body>
<h1>Test</h1>
<input type="file" id="input"/>
<canvas width="400" height="300" id="canvas"/>
</body>
</html>
You have a
Fileinstance which is not an image.To get an image, use
new Image(). Thesrcneeds to be an URL referencing to the selectedFile. You can useURL.createObjectURLto get an URL referencing to aBlob(aFileis also aBlob): http://jsfiddle.net/t7mv6/86/.Note: be sure to revoke the object url when you are done with it otherwise you’ll leak memory. If you’re not doing anything too crazy, you can just stick a
URL.revokeObjectURL(img.src)in theimg.onloadfunction.References: