在以前,要用web来实现图片上传预览功能必须借助插件或者flash来实现。但是现在我们可以借助 HMTL5 的 canvas 来实现这个功能。
例如下面的效果

实现该功能很简单,首先我们要建一个表单,用于用户选取图片。
<input type="file" name="picture" accept="image/png, image/jpeg"/>
一旦用户选中图片,将其显示在canvas的函数可以这样写:
document.querySelector('input[name=picture]').onchange = function(e){
readFile(e.target.files[0]);
}
function readFile(file){
var reader = new FileReader();
reader.onload = function(e){
applyDataUrlToCanvas( reader.result );
};
reader.readAsDataURL(file);
}
还可以在canvas上面定义拖放事件,允许用户直接拖放图片到上面。
// stop FireFox from replacing the whole page with the file.
canvas.ondragover = function () { return false; };
// Add drop handler
canvas.ondrop = function (e) {
e.stopPropagation();
e.preventDefault();
e = e || window.event;
var files = e.dataTransfer.files;
if(files){
readFile(files[0]);
}
};
所有的拖放事件都有一个dataTransfer属性,它包含拖放过程涉及的二进制数据。
还可以让canvas显示剪贴板中的图片。
document.onpaste = function(e){
e.preventDefault();
if(e.clipboardData&&e.clipboardData.items){
// pasted image
for(var i=0, items = e.clipboardData.items;i<items.length;i++){
if( items[i].kind==='file' && items[i].type.match(/^image/) ){
readFile(items[i].getAsFile());
break;
}
}
}
return false;
};

: » HTML5 canvas 实现本地文件上传预览功能
原创文章,作者:Carrie001128,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/251215.html