html5实现本地图片预览功能

1.利用FileReader进行图片本地预览

    FileReader类型实现的是一种异步文件读取机制,用来把文件读入内存,并且读取文件中的数据。各大浏览器的支持情况:

 
html5实现本地图片预览功能

构造方法

var reader = new <a href="https://developer.mozilla.org/en-US/docs/Web/API/FileReader/FileReader" class="new" title="The documentation about this has not yet been written; please consider contributing!" style="margin: 0px; color: #990000; text-decoration: none; border: 0px; padding: 0px;">FileReader()</a>;

为了读取文件中的数据,FileReader提供了如下几个方法:

readAsText(file,encoding):以纯文本的形式读取文件,将读取到的文本保存在result属性中,第二个参数指定编码类型,可选。

readAsDataURL(file):读取文件并将文件以数据URL的形式保存在result属性中。

readAsBinaryString(file): 读取文件并将一个字符串保存在result属性中,字符串中的每一个字符表示一个字节。

readAsArrayBuffer(file): 将一个包含文件内容的ArrayBuffer保存在result。

了解了FileReader的基本使用后,来实现下图片的本地预览功能:

<input type="file" name="inputfile" accept="image/*" onchange="readFile(this.files[0])">
<div id="preview"></div>
function readFile(f){
    var reader = new FileReader();
    reader.readAsDataURL(f); //base64编码
   reader.onload = function(){
         var preview = document.querySelector('#preview');
         var img = document.createElement("img");
         img.src = reader.result;
         preview.appendChild(img);
    }
   reader.onerror = function(e){
         console.log("Error"+e);
   }
}

 页面效果看起来是这个样子的:


html5实现本地图片预览功能
 当选择图片后就可以本地预览啦,结合ajax实现图片上传预览功能。

效果图:
html5实现本地图片预览功能
 2.URL.createObjectURL()进行图片本地预览

     URL.createObjectURL() 静态方法会创建一个 DOMString,它的 URL 表示参数中的对象。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示着指定的 File 对象或者 Blob 对象。

构造方法

<em>objectURL </em>= URL.createObjectURL(blob);  //参数blob:是用来创建 URL 的 File 对象或者 Blob 对象​

在每次调用 createObjectURL() 方法时,都会创建一个新的 URL 对象,即使你已经用相同的对象作为参数创建过。当不再需要这些 URL 对象时,每个对象必须通过调用window.URL.revokeObjectURL()方法来释放。浏览器会在文档退出的时候自动释放它们,但是为了获得最佳性能和内存使用状况,你应该在安全的时机主动释放掉它们。

HTML结构与之前一样。

if (window.URL) {
     var preview = document.querySelector('#preview');
     var img = document.createElement("img");
     img.src = window.URL.createObjectURL(f);
     img.onload = function(){
	   window.URL.revokeObjectURL(this.src); //释放内存
     }
     preview.appendChild(img);
}

 效果如上。

相关推荐