本文摘自PHP中文网,作者零下一度,侵删。
实现流程:
获取<input type="file">上传的文件;
使用FileReader读取图片,并新建一个Image对象将FileReader读取的图片数据放进去;
使用canvas将Image对象等比缩放并写入到画布中,保存为base64格式的数据(这里使用的是FormData对象上传,其实这里已经可以直接将base64的数据通过ajax使用post方法上传到服务器,即可避免下面两个步骤);
新建一个Blob对象将base64数据放入;
使用FormData对象上传到第三方云储存服务器;
使用HTML原生<input type="file">上传图片,下面是踩的一些小坑:
accept设定上传文件的类型,这里直接用image/*,不指定具体的后缀名,否则部分安卓手机下无法上传图片;
添加multiple属性可选取多张图片(本例只做选取单张图片);
capture="camera"属性可以调用摄像头(添加此属性在iPhone下会直接调用摄像头,而不会读取相册;且目前安卓和ios设备使用accept="image/*"均可选择使用摄像头拍照还是使用相册的图片,所以该属性可以忽略)。
1 |
|
当input文件触发change事件后获取上传的文件
1 2 3 4 5 6 7 8 9 |
|
使用FileReader获取图片数据,并使用canvas压缩
ios手机拍照会旋转90度,这里必须判断是否ios手机做出相应处理后再上传
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
将base64的数据转换成一个Blob对象
安卓手机不支持Blob构造方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
使用HTML5的FormData对象上传数据
1 2 3 4 5 6 7 8 9 |
|
【相关推荐】
1. 免费h5在线视频教程
2. HTML5 完整版手册
3. php.cn原创html5视频教程
以上就是分享利用HTML5实现图片压缩上传的实例代码的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
HTML5中返回当前音频/视频的url的属性currentsrc
HTML5 webworkers防止浏览器假死的示例代码分享
更多相关阅读请进入《HTML5》频道 >>

Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者