移动端Vue下使用Cropper.js + 原生js实现图片裁剪异步上传功能
2020-02-07 00:55
591 查看
Cropper是一个同时支持PC端和移动的图片裁剪工具,这次公司业务需要,所以研究使用了一波,感觉很强大,下面是主流程步骤解析和部分业务源码
一、主要流程
- input[type='file']获取图片
- 实例化new FileReader().readAsDataURL读取input图片,回调结果绑定给img标签显示图片
- 调用Cropper实例传入两个参数第一个是img dom,第二个是可选配置参数(稍后介绍)
- 确定裁剪 调用cropper.getCroppedCanvas().toBlob( blob => {}) 获取截图后的Blob对象
- new File([blob]) 生成file对象
- new FormData().append('file', file) 放入form表单
- ajax form表单上传
二、分步代码解析
1.input[type='file']获取图片
2.实例化new FileReader().readAsDataURL读取input图片,回调结果绑定给corpperImg标签显示图片
[code]<input @change="getFile" class="input" type="file" ref="file1" accept="image/jpg,image/jpeg,image/png,image/gif"/> // 在inputchange事件时触发 getFile (e) { const toast = Toast('图片读取中,请稍后...') let _this = this this.cropperImg = null let files = e.target.files[0] // 获取图片原文件 if (!e || !window.FileReader) return // 看支持不支持FileReader let reader = new FileReader() reader.readAsDataURL(files) reader.onloadend = function () { _this.isShowCropper = true _this.cropperImg = this.result // reader结果 _this.$refs.file1 && (_this.$refs.file1.value = '')// 清空value } }
3.调用cropper实例传入两个参数第一个是img dom,第二个是可选配置参数
[code]import Cropper from 'cropperjs' const option = { outputSize: 1, // 裁剪生成图片的质量 outputType: 'png', // 裁剪生成图片的格式 canScale: true, // 图片是否允许滚轮缩放 autoCrop: true, // 是否默认生成截图框 aspectRatio: 1, // 设置裁剪框的宽高比partnerMine minContainerWidth: document.body.offsetWidth, // 容器宽 minContainerHeight: 300 // 容器高 } // 实例化Cropper this.cropper = new Cropper(this.$refs.cropperImg, option)
copper样式不对的地方记得做修改
4.确定裁剪
- 调用cropper.getCroppedCanvas().toBlob( blob => {}) 获取截图后的blob对象
- new File([blob]) 生成file对象
- new FormData().append('file', file) 放入form表单
- ajax上传
[code]// 这里调用cropper的方法获取截图blob this.cropper.getCroppedCanvas().toBlob(async blob => { const contentType = 'image/jpeg' // 文件类型 // 这里使用File构造函数生成文件,注意第二个参数,文件名一定要写全,包括文件类型 // 本文使用的是 .jpeg // 第三个参数的type也要写上 const file = new File([blob], 'img.jpeg', {type: contentType, lastModified: Date.now()}) const formData = new FormData() // 构建form表单准备提交 formData.append('file', file) const res = await axios('/upload', data: formData, 'POST') // axios异步上传 // 这里如果是$.ajax上传,记得参照ajax上传form表单的格式 alert(res.data) // 后端返回的文件地址 this.cropper.destroy() // 销毁cropper })
官方demo链接:https://fengyuanchen.github.io/cropperjs/
参考链接:
Cropper.js https://github.com/fengyuanchen/cropperjs
MDN:https://developer.mozilla.org/zh-CN/
有什么问题欢迎在下方留言讨论~
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- cropper js基于vue的图片裁剪上传功能的实现代码
- vue实现移动端图片裁剪上传功能
- vue使用cropperjs实现移动端图片裁剪上传组件
- vue.js 实现图片本地预览 裁剪 压缩 上传功能
- cropper.js 实现裁剪图片并上传(移动端)
- 使用cropper.js 实现简单的头像裁剪上传
- Vue项目使用Cordova实现调取原生摄像头并实现裁剪功能
- [PHP]移动端网页如何使用JqueryMobile+PHP实现上传图片的功能
- fileuploadJs+JcropJs+php综合小应用 实现图片拖拽上传与裁剪功能的demo
- cropper.js实现上传、裁剪、缩放图片
- vue移动端裁剪图片结合插件Cropper的使用
- vue移动端裁剪图片结合插件Cropper的使用实例代码
- ASP.NET使用Jcrop插件实现图片上传裁剪功能
- 原生js实现ajax的文件异步提交功能、图片预览功能.实例
- cropper.js 实现裁剪图片并上传(PC端)
- Vue2.0 引用 exif.js 实现调用摄像头进行拍照功能以及图片上传功能
- JS+html5实现异步上传图片显示上传文件进度条功能示例
- 使用angular.js实现异步图片加属性的上传
- vue移动端裁剪图片结合插件Cropper的使用
- Cropper.js 实现裁剪图片并上传(PC端)