HTML5图片上传图片实时预览,通过DataURL将图片压缩“嵌入”到HTML中,优化图片的加载速度和执行效率。
来源:互联网 发布:手机淘宝排名提升 编辑:程序博客网 时间:2024/06/05 02:52
HTML5图片上传图片实时预览,通过DataURL将图片压缩“嵌入”到HTML中,优化图片的加载速度和执行效率。
传统的方式预览图片主要有两种方法:
① 先上传图片到服务器,服务器返回URL,再将URL放在img标签上来达到预览图片的目的。
优点:开发方便,原理简单,实现容易。
缺点:功能支持有限,需要先上传再下载图片,需要额外占用一个HTTP会话,中间很耗时耗流量。
② 通过FLASH控件来实现实时预览图片。
优点:能够实现本地预览、压缩图片后上传,能够支持早期IE浏览器。
缺点:需要安装Flash 控件,手机端不支持。
通过DataURL实现本地图片预览:
优点:
① 直接生成Base64图片编码,不需要引入外部资源,不占用额外连接。
② 由于不占用额外连接,图片加载速度很快。
③ 几乎所有浏览器都支持。
④ dataURL和Blob对象可以互相转换,很方便图片上传。
缺点:
① DataURL形式的图片不会被浏览器所缓存,不过可以结合css一起使用,css资源文件是可以被浏览器缓存的。
② 很占CPU内存资源,不适合大量使用,可以在可接受的范围内适量使用。
③ 不支持早期IE浏览器。
分析利弊,可以看出DataURL很适合做前端图片预览。
代码实践:
Html部分:
…
<input type="file" accept="image/*" id="fileImage"/>
…
<img id="preview" src=""/>
Js部分:
/** * Created by cjbi on 2017/8/21. *///获取input document对象 var fileInput = document.querySelector("#fileImage"); //监听input改变事件 fileInput.addEventListener("change", function (e) { //获取文件流 var file = e.target.files[0]; if (file) { //创建文件读取对象 var reader = new FileReader(); //创建图片对象 var image = new Image(), //创建cavas对象 canvas = document.createElement("canvas"), //获取2D绘图对象 ctx = canvas.getContext('2d'); //文件加载完成后执行执行 reader.onload = function (e) { var url = reader.result;//读取到的文件内容.这个属性只在读取操作完成之后才有效,并且数据的格式取决于读取操作是由哪个方法发起的.所以必须使用reader.onload image.src = url;//reader读取的文件内容是base64,利用这个url就能实现上传前预览图片 }; //图片加载完成后执行执行 image.onload = function () { var w = image.naturalWidth,//获取图片原始宽度 h = image.naturalHeight;//获取图片原始高度 canvas.width = 120;//cavas画板宽度 canvas.height = 120;//cavas画板高度度 // drawImage 参数说明: //context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height); // 参数 描述 // img 规定要使用的图像、画布或视频。 // sx 可选。开始剪切的 x 坐标位置。 // sy 可选。开始剪切的 y 坐标位置。 // swidth 可选。被剪切图像的宽度。 // sheight 可选。被剪切图像的高度。 // x 在画布上放置图像的 x 坐标位置。 // y 在画布上放置图像的 y 坐标位置。 // width 可选。要使用的图像的宽度。(伸展或缩小图像) // height 可选。要使用的图像的高度。(伸展或缩小图像) ctx.drawImage(image, 0, 0, w, h, 0, 0, 200, 200); //展示预览图片 document.querySelector("#preview").src = cavas.toDataURL(); } reader.readAsDataURL(file); }}, false);
选定图片上传,console观察img标签src属性变化:
<img id="preview" src="data:image/gif;base64,R0lGODlhAwADAIAAAP///..此处有省略…//8zMzCH5BAAAAAAALAAAAAADAAMAAAIEBHIJBQA7"/>
可以看出src属性生成了一串Base64编码,这就是DataURL形式的图片了。
DataURL如何转Blob对象:
其实File也是属于Blob对象,转换为Blob对象后,可以使用Ajax上传图像文件了。
/** * dataURL转换成Blob的方法 created by cjbi * @param dataURL * @returns {*} */ function dataURLtoBlob(dataURL) { var arr = dataURL.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new Blob([u8arr], {type: mime});}
总结:在这个例子中,DataURL的使用是完全符合场景的。它避免了让这个小小的预览图片独自产生一次次HTTP请求。而且用户体验上也上升了新的高度。
阅读全文
0 0
- HTML5图片上传图片实时预览,通过DataURL将图片压缩“嵌入”到HTML中,优化图片的加载速度和执行效率。
- 上传图片,实时预览
- html5预览上传图片
- html5---图片上传预览
- Html5 上传图片预览
- HTML5上传图片预览
- html上传图片预览
- html上传图片预览
- html一个上传图片实时预览的小demo
- html5 压缩图片上传
- 上传图片实时预览缩略图
- JS图片上传实时预览
- 上传前实时图片预览
- 图片上传实时预览效果
- 上传图片本地实时预览
- java中上传图片,加载上传的图片到页面
- 手机网页中通过js+html5压缩上传图片
- iOS 中图片压缩和图片上传
- POJ 2406 Power Strings(KMP+最小循环节)
- 字符串问题---括号字符串的有效性和最长有效长度
- 简单实现日历功能
- 机器学习各种算法的特点归纳
- 转发与重定向
- HTML5图片上传图片实时预览,通过DataURL将图片压缩“嵌入”到HTML中,优化图片的加载速度和执行效率。
- hdu 6153 A Secret (kmp)
- Unity-jenkins持续集成--配置
- 中文拼音排序
- HDU 6153 A Secret(kmp)
- gulp插件之-----转化es6代码到es5 取消严格模式 remove "use strict" directive Installation npm install babel-plugin-t
- android APK升级
- 二、maven项目搭建 springmvc+ spring + mybatis(2环境)
- 北京搜狐大数据