cropper js基于vue的图片裁剪上传功能的实现代码


Posted in Javascript onMarch 01, 2018

前些日子做了一个项目关于vue项目需要头像裁剪上传功能,看了一篇文章,在此基础上做的修改完成了这个功能,与大家分享一下。原文:https://3water.com/article/135719.htm

首先下载引入cropper js,

npm install cropper js --save

在需要的页面引入:import Cropper from "cropper js"

html的代码如下:

<template> 
 <div id="demo"> 
 <!-- 遮罩层 --> 
 <div class="container" v-show="panel"> 
 <div> 
  <img id="image" :src="url" alt="Picture"> 
 </div> 
 <button type="button" id="button" @click="commit">确定</button> 
 <button type="button"id="cancel" @click="cancel">取消</button> 
 </div> 
 <div style="padding:20px;"> 
 <div class="show"> 
  <div class="picture" :style="'backgroundImage:url('+headerImage+')'"> 
  </div> 
 </div> 
 <div style="margin-top:20px;text-align: left;"> 
  <input type="file" id="change" accept="image" @change="change"> 
  <label for="change"></label> 
 </div> 
 </div> 
 </div> 
</template>

主要是js代码,如下

1,data里面定好初始变量,绑定数据,imgCropperData是我定义的判断图片格式的。

data() { 
 return { 
 headerImage: "", 
 picValue: "", 
 cropper: "", 
 croppable: false, 
 panel: false, 
 url: "", 
 imgCropperData: { 
 accept: "image/gif, image/jpeg, image/png, image/jpg" 
 } 
 }; 
 }

2,在mounted里面初始换裁剪框

mounted() { 
 //初始化这个裁剪框 
 var self = this; 
 var image = document.getElementById("image"); 
 this.cropper = new Cropper(image, { 
 aspectRatio: 1, 
 viewMode: 1, 
 background: false, 
 zoomable: false, 
 ready: function() { 
 self.croppable = true; 
 } 
 }); 
 }

3.methods的方法比较多,包括创建URL路径,input框change事件,canvas画图,确定提交上传。我还加了取消事件函数,判断上传文件的类型和大小。

methods: { 
 //取消上传 
 cancel() { 
 this.panel = false; 
 var obj = document.getElementById('change') ; 
 obj.outerHTML=obj.outerHTML; 
 }, 
 //创建url路径 
 getObjectURL(file) { 
 var url = null; 
 if (window.createObjectURL != undefined) { 
 // basic 
 url = window.createObjectURL(file); 
 } else if (window.URL != undefined) { 
 // mozilla(firefox) 
 url = window.URL.createObjectURL(file); 
 } else if (window.webkitURL != undefined) { 
 // webkit or chrome 
 url = window.webkitURL.createObjectURL(file); 
 } 
 return url; 
 }, 
 //input框change事件,获取到上传的文件 
 change(e) { 
 let files = e.target.files || e.dataTransfer.files; 
 if (!files.length) return; 
 let type = files[0].type; //文件的类型,判断是否是图片 
 let size = files[0].size; //文件的大小,判断图片的大小 
 if (this.imgCropperData.accept.indexOf(type) == -1) { 
 alert("请选择我们支持的图片格式!"); 
 return false; 
 } 
 if (size > 5242880) { 
 alert("请选择5M以内的图片!"); 
 return false; 
 } 
 this.picValue = files[0]; 
 this.url = this.getObjectURL(this.picValue); 
 //每次替换图片要重新得到新的url 
 if (this.cropper) { 
 this.cropper.replace(this.url); 
 } 
 this.panel = true; 
 }, 
 //确定提交 
 commit() { 
 this.panel = false; 
 var croppedCanvas; 
 var roundedCanvas; 
 if (!this.croppable) { 
 return; 
 } 
 // Crop 
 croppedCanvas = this.cropper.getCroppedCanvas(); 
 // Round 
 roundedCanvas = this.getRoundedCanvas(croppedCanvas); 
 this.headerImage = roundedCanvas.toDataURL(); 
 //上传图片 
 this.postImg(); 
 }, 
 //canvas画图 
 getRoundedCanvas(sourceCanvas) { 
 var canvas = document.createElement("canvas"); 
 var context = canvas.getContext("2d"); 
 var width = sourceCanvas.width; 
 var height = sourceCanvas.height; 
 canvas.width = width; 
 canvas.height = height; 
 context.imageSmoothingEnabled = true; 
 context.drawImage(sourceCanvas, 0, 0, width, height); 
 context.globalCompositeOperation = "destination-in"; 
 context.beginPath(); 
 context.arc( 
 width / 2, 
 height / 2, 
 Math.min(width, height) / 2, 
 0, 
 2 * Math.PI, 
 true 
 ); 
 context.fill(); 
 return canvas; 
 }, 
 //提交上传函数 
 postImg() { 
 alert("上传成功"); 
 //这边写图片的上传 
 } 
 }

css样式代码就不贴出来了,可以到GitHub上下载https://github.com/leileibrother/cropper-js-vue-。

总结

以上所述是小编给大家介绍的cropper js基于vue的图片裁剪上传功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Javascript图像处理思路及实现代码
Dec 25 Javascript
js中的事件捕捉模型与冒泡模型实例分析
Jan 10 Javascript
JS组件系列之Bootstrap Icon图标选择组件
Jan 28 Javascript
jQuery实现的placeholder效果完整实例
Aug 02 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
Dec 21 Javascript
图解Javascript——作用域、作用域链、闭包
Mar 21 Javascript
JQuery实现定时刷新功能代码
May 09 jQuery
JavaScript创建对象的四种常用模式实例分析
Jan 11 Javascript
JavaScript常用工具方法封装
Feb 12 Javascript
微信小程序数据统计和错误统计的实现方法
Jun 26 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 Vue.js
vue脚手架项目创建步骤详解
Mar 02 Vue.js
Vuex中mutations与actions的区别详解
Mar 01 #Javascript
vue 实现剪裁图片并上传服务器功能
Mar 01 #Javascript
解决easyui日期时间框ie的兼容的问题
Mar 01 #Javascript
详解Immutable及 React 中实践
Mar 01 #Javascript
解决VUEX兼容IE上的报错问题
Mar 01 #Javascript
Node.js readline 逐行读取、写入文件内容的示例
Mar 01 #Javascript
基于Vuex无法观察到值变化的解决方法
Mar 01 #Javascript
You might like
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
用PHP和ACCESS写聊天室(五)
2006/10/09 PHP
PHP 数组和字符串互相转换实现方法
2013/03/26 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
php统计数组元素个数的方法
2015/07/02 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
javascript开发技术大全-第1章javascript概述
2011/07/03 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
怎么判断js脚本加载完成
2014/02/28 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
2018/04/27 Javascript
javaScript实现游戏倒计时功能
2018/11/17 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
js实现弹幕墙效果
2020/12/10 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
python实现用户管理系统
2018/01/10 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
Python 打印中文字符的三种方法
2018/08/14 Python
Python列表元素常见操作简单示例
2019/10/25 Python
给酒店员工的表扬信
2014/01/11 职场文书
违纪检讨书2000字
2014/02/08 职场文书
经典的毕业生自荐信范文
2014/04/14 职场文书
协会周年庆活动方案
2014/08/26 职场文书
三八妇女节标语
2014/10/09 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
党风廉正建设责任书
2015/01/29 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python