摘要:微信前端页多图压缩上传坑不少,换了N多插件也没有完全满意的,泪…
前端图片压缩预览上传
如果只是微信内部的页面,可以直接调用微信jssdk,这个还是比较方便的。如果只是这样我还会踩这么多坑吗?记录下压缩上传插件的使用记录
1.首先使用的是百度的 Web Uploader,地址:http://fex-team.github.io/webuploader/。效果:在 pc 端没问题,微信端就不行了,官网上好像有兼容的解决方法但我没有试
2.第二个使用的是 uploadify,地址:http://www.uploadify.com/。现在已经是版本 3.x.x 了,因为收费就使用了免费的版本 2.x.x。效果:pc 端全屏没问题,但是当页面宽度小于一定值时,程序就会失效,连选择按钮都不会生成
3.各种搜索到的开源的压缩上传插件,试了好几个都不理想。想自己写一个上传插件,试了下发现要用到Exif.js适配ios调整方向。此外程序在微信里不够稳定,总之兼容性不好。最后使用了localResizeIMG,感觉在不调用微信jssdk的时候它是最优选择,但是安卓机反应稍慢。效果:ios 上使用 input 标签的 multiple 属性可以一次选择多个图片,但是在安卓上不支持该属性,每次仍只能上传一张图片
结论:前端压缩图片上传在pc端使用百度的 Web Uploader,移动端使用 localResizeIMG,微信端使用 jssdk(安卓上微信内置的浏览器不识别multiple
属性,如果要选择多图就必须使用微信的 jssdk),感谢 localResizeIMG 的作者和代码贡献者
前端图片压缩上传的原理:先使用 Exif.js 获取图片的方向信息,然后用FileReader读取图片信息并根据方向信息和压缩要求将图片正确的绘制在 canvas 上,再利用 canvas的toDataURL 方法将压缩后的图片保存为 base64 位信息(该信息可以直接放在 img 标签的 src 属性上预览图片),最后将图片的 base64 位信息存到f ormData 中传到后台