【web】js图片压缩并上传——图片压缩-demo01
2016-10-10 11:59
381 查看
引用其他大神的项目进行分析——很好的一个学习材料
http://www.cnblogs.com/axes/p/4603984.html
项目成品图:
运行的状态:
点击上传图片,并随机选择一张图片:
目前来说,HTML5的各种新API都在移动端的webkit上得到了较好的实现。
根据查看caniuse,本demo里使用到的FileReader、Blob、Formdata对象均已在大部分移动设备浏览器中得到了实现(safari6.0+、android 3.0+),所以直接在前端压缩图片,已经成了很多移动端图片上传的必备功能了。
实现思路:
在移动端压缩图片并且上传主要用到filereader、canvas 以及 formdata 这三个h5的api。
三大部分:
【一】获取图片数据
用户使用input file上传图片的时候,用filereader读取用户上传的图片数据(base64格式)
【二】压缩图片
把图片数据传入img对象,然后将img绘制到canvas上,再调用canvas.toDataURL对图片进行压缩
【三】图片上传
获取到压缩后的base64格式图片数据,转成二进制塞入formdata,再通过XmlHttpRequest提交formdata。
如此三步,就完成了图片的压缩和上传。
第一部分:
采用了多文件的方式进行上传,如图所示:
备注:
功能看自身需要,如只需单文件上传可以自行更改,在此不重复论述。
第二部分:图片压缩
这里稍微有些坑!!!!!!!!!
在做移动端图片上传的时候,用户传的都是手机本地图片,而本地图片一般都相对比较大,平时拍很多图片都是一两M的,如果直接这样上传,那图片就太大了,如果用户用的是移动流量,完全把图片上传显然不是一个好办法,因此需要先把图片压缩一下。
但是此项目在压缩的过程中,在电脑浏览器操作时,没什么问题;但是应用到移动端时,会有明显的卡顿,这是因为项目中使用大量算法导致大图片压缩的时间比较长,这样是严重影响用户体验的。
ps:正因为如此,所以本人最后没有采用此项目,但是还是比较有研究的价值!
第三部分:图片上传
完成图片压缩后,就可以塞进formdata里进行上传了,先将base64数据转成字符串,再实例化一个ArrayBuffer,然后将字符串以8位整型的格式传入ArrayBuffer,再通过BlobBuilder或者Blob对象,将8位整型的ArrayBuffer转成二进制对象blob,然后把blob对象append到formdata里,再通过ajax发送给后台即可。
图片的上传可以使用ajax上传,也可以使用XMLHttpRequest对象上传,XmlHttpRequest不仅可以发送大数据,还多出了比如获取发送进度的API,代码里也进行了简单的实现。
此项目采用
bfa5
了XMLHttpRequest的方式进行上传,因此同学们使用项目时,注意下图划起来的部分,这里是需要写后台被访问的接口,而项目中无法提供接口,因此运行时会报错的!!
http://www.cnblogs.com/axes/p/4603984.html
项目成品图:
运行的状态:
点击上传图片,并随机选择一张图片:
目前来说,HTML5的各种新API都在移动端的webkit上得到了较好的实现。
根据查看caniuse,本demo里使用到的FileReader、Blob、Formdata对象均已在大部分移动设备浏览器中得到了实现(safari6.0+、android 3.0+),所以直接在前端压缩图片,已经成了很多移动端图片上传的必备功能了。
实现思路:
在移动端压缩图片并且上传主要用到filereader、canvas 以及 formdata 这三个h5的api。
三大部分:
【一】获取图片数据
用户使用input file上传图片的时候,用filereader读取用户上传的图片数据(base64格式)
【二】压缩图片
把图片数据传入img对象,然后将img绘制到canvas上,再调用canvas.toDataURL对图片进行压缩
【三】图片上传
获取到压缩后的base64格式图片数据,转成二进制塞入formdata,再通过XmlHttpRequest提交formdata。
如此三步,就完成了图片的压缩和上传。
第一部分:
采用了多文件的方式进行上传,如图所示:
备注:
功能看自身需要,如只需单文件上传可以自行更改,在此不重复论述。
第二部分:图片压缩
这里稍微有些坑!!!!!!!!!
在做移动端图片上传的时候,用户传的都是手机本地图片,而本地图片一般都相对比较大,平时拍很多图片都是一两M的,如果直接这样上传,那图片就太大了,如果用户用的是移动流量,完全把图片上传显然不是一个好办法,因此需要先把图片压缩一下。
但是此项目在压缩的过程中,在电脑浏览器操作时,没什么问题;但是应用到移动端时,会有明显的卡顿,这是因为项目中使用大量算法导致大图片压缩的时间比较长,这样是严重影响用户体验的。
ps:正因为如此,所以本人最后没有采用此项目,但是还是比较有研究的价值!
第三部分:图片上传
完成图片压缩后,就可以塞进formdata里进行上传了,先将base64数据转成字符串,再实例化一个ArrayBuffer,然后将字符串以8位整型的格式传入ArrayBuffer,再通过BlobBuilder或者Blob对象,将8位整型的ArrayBuffer转成二进制对象blob,然后把blob对象append到formdata里,再通过ajax发送给后台即可。
图片的上传可以使用ajax上传,也可以使用XMLHttpRequest对象上传,XmlHttpRequest不仅可以发送大数据,还多出了比如获取发送进度的API,代码里也进行了简单的实现。
此项目采用
bfa5
了XMLHttpRequest的方式进行上传,因此同学们使用项目时,注意下图划起来的部分,这里是需要写后台被访问的接口,而项目中无法提供接口,因此运行时会报错的!!
相关文章推荐
- 妈蛋:kinMaxShow轮播图异常,WebUploader图片上传坑爹,图片被压缩了
- js加canvas实现图片的预览压缩和上传
- JS实现异步上传压缩图片
- 手机网页中通过js+html5压缩上传图片
- JS前端上传图片、压缩、并且处理旋转问题,生成base64数据
- 妈蛋:kinMaxShow轮播图异常,WebUploader图片上传坑爹,图片被压缩了
- 微信公众号开发《四》使用微信JS-SDK实现手机图片上传,支持压缩、预览。并下载图片到自身服务器
- 妈蛋:kinMaxShow轮播图异常,WebUploader图片上传坑爹,图片被压缩了
- js本地压缩图片,上传base64给后台,再给七牛
- Node.js压缩web项目中的js,css和图片
- WebUploader上传图片(不压缩)
- 微信web开发的上传图片js接口
- JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
- js上传图片之前利用canvas压缩和转base64
- Vue.js 2.0 移动端拍照压缩图片预览及上传 的全部源代码 lrz自己安装 npm i lrz --save -g 自己引入vux的 confirmplugin
- HTML5 JS 压缩图片,并取得图片的BASE64编码上传
- Css 优化压缩,Js压缩,小图片合成---Web 2.0 开发必备工具
- js压缩上传的图片,并转化为base64字符串传输
- JS和Canvas实现图片的预览压缩和上传功能