html5 实现图片预览

还是先直接给出 demo 吧,大家可以运行这个 demo 先来看一下效果:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>blob-fileRender</title> <style> #prev1, #prev2 { height: 400px; width: 100%; } img { height: 100%; } </style> </head> <body> <div id="prev1"> <input type="file" id="file1" accept="image/*"> <br> <img src="" alt="" id="view1"> </div> <br><br> <div id="prev2"> <input type="file" id="file2" accept="image/*"> <br> <img src="" alt="" id="view2"> </div> <script> document.getElementById("file1").addEventListener('change', function(){ var files = this.files; var file; if (files && files.length) { file = files[0]; if (/^image\/png$|jpeg$/.test(file.type)) { document.getElementById('view1').src = URL.createObjectURL(file); } else { alert("Please choose an image file with jpg jpeg png."); } } else { alert("Please choose image file"); } }, false); document.getElementById("file2").addEventListener('change', function(){ var files = this.files; var file; if (files && files.length) { file = files[0]; if (/^image\/png$|jpeg$/.test(file.type)) { var reader = new FileReader(); reader.onload = function (e) { document.getElementById('view2').src = e.target.result; }; reader.readAsDataURL(file); } else { alert("Please choose image file with jpg jpeg png."); } } else { alert("Please choose image file"); } }, false); </script> </body> </html>

可以保存这个 html 文件,然后打开。

这里面有两个选择文件的按钮,都实现了选中图片,然后实时预览的效果。但是实现的细节并不一样。

分别使用了 URLFileReader 来实现的。

FileReader

========================================================================

FileReader 对象允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。

其中 File 对象可以是来自用户在一个 <input> 元素上选择文件后返回的 FileList 对象,也可以来自拖放操作生成后的 DataTransfer 对象,还可以是来自在一个 HTMLCanvasElement 上执行 mozGetAsFile() 方法后返回结果。

想要创建一个 FileReader 对象,很简单,如下:

var reader = new FileReader();

FilerReader 对象有以下方法和事件:

方法概述


abort()

readAsArrayBuffer()

readAsBinaryString()

readAsDataURL()

readAsText()

事件处理程序


onabort

onerror

onload

onloadend

onloadstart

onprogress

关于 方法概述事件处理程序 的详细使用细则,建议大家阅读这篇较为官方的文档:

https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader

URL

=================================================================

在现代浏览器中,有 URL 这个对象,可以直接使用:

URL.createObjectURL(file);

为了兼容性考虑,我们可以这样:

var URL = window.URL || window.webkitURL;

这个 URL 提供了用于创建和管理对象 URLs 的静态方法。它也可以作为一个构造函数被调用来构造 URL 对象。

语法


调用一个静态方法:

img.src = URL.createObjectURL(blob);

构造一个新对象:

var url = new URL(“…/cats/”, “https://www.example.com/dogs/”);

Blob

==================================================================

一个 Blob 对象表示一个不可变的,原始数据的类似文件对象。Blob 表示的数据不一定是一个 JavaScript 原生格式。 File 接口基于 Blob ,继承 blob 功能并将其扩展 为支持用户系统上的文件。

正因为如此,所以,我们可以在 URL.createObjectURL(blob); 这个方法中直接传入 File 对象。

要构造一个 Blob 从其他非 blob 对象和数据,请使用 Blob() 构造函数。要创建一个包含另一个 blob 的数据子集的 blob , 请使用 clice() 方法。要从用户文件系统上的一个文件中获取一个 Blob 对象,请参阅 File 文档。

关于 Blob 的详细介绍请查阅:https://developer.mozilla.org/zh-CN/docs/Web/API/Blob


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值