效果图:

全部代码:

npm install vue-cropper     //首先 安装vue-cropper

main.js全局引用:

import VueCropper from 'vue-cropper'

Vue.use(VueCropper)

// 挂载全局
Vue.prototype.$http = httpRequest // ajax请求方法   更具自己需求来
<template>
<div class="footerBtn">
<img v-if="attach.laterUrl" :src="attach.laterUrl" class="preview" style="width:375px;height:190px"/>
<el-button @click="dialogVisible=true">上传头像</el-button> <!-- 弹出层-裁剪 -->
<el-dialog
title="上传图片"
:visible.sync="dialogVisible"
:before-close="handleClose"
width="700px"
top
center>
<div>
<el-row>
<el-button class="el-icon-upload" type="primary" style="padding: 13px 50px;"> 点击上传</el-button>
<input
type="file"
id="uploads"
accept="image/png, image/jpeg, image/gif, image/jpg"
@change="uploadImg($event,1)"
class="el-button"
style="margin-left: -162px;display: inline-block;width: 173px;margin-bottom: 15px;opacity: 0;">
</el-row>
<el-row>
<!-- <el-col :span="16"> -->
<el-col :span="24">
<!-- 裁剪 -->
<vueCropper
style="width:100%;height:300px"
ref="cropper"
:img="attach.customaryUrl"
:autoCrop="options.autoCrop"
:fixedBox="options.fixedBox"
:canMoveBox="options.canMoveBox"
:autoCropWidth="options.autoCropWidth"
:autoCropHeight="options.autoCropHeight"
:centerBox="options.centerBox"
@realTime="realTime"
> </vueCropper>
</el-col>
<el-col :span="24">
<h2 align="center">头像预览</h2>
<div class="show-preview">
<div :style="previews.div" class="preview">
<img style="width:100%" :src="previews.url" :style="previews.img">
</div>
</div>
</el-col>
</el-row>
<el-row class="footerBtn" align="center">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="cut('blob')">确认</el-button> </el-row>
</div>
</el-dialog>
</div>
</template> <script>
//数据库里需要存两份图片地址,一张为原图地址,一张为裁剪后的头像地址
export default {
data(){
return{
dialogVisible:false,
options:{
autoCrop:true, //默认生成截图框
fixedBox:true, //固定截图框大小
canMoveBox:false, //截图框不能拖动
autoCropWidth:375, //截图框宽度
autoCropHeight:190, //截图框高度
centerBox:false, //截图框被限制在图片里面
},
previews:{}, //实时预览图数据
attach:{ //后端附件表
id:'',
userId:'',
customaryUrl:'', //原图片路径
laterUrl:'',//裁剪后图片路径 /static/logo.png
attachType:'photo',//附件类型
},
fileName:'',//本机文件地址
uploadImgRelaPath:'',//上传后图片地址
}
},
methods:{
//控制弹出层关闭
handleClose(){
this.dialogVisible=false
},
//实时预览
realTime(data){
this.previews=data
},
//加载头像信息
// find(){
// this.userId = sessionStorage.getItem('userId');
// this.$axios.post('/api/attach/find',this.attach).then(res=>{
// console.log(res);
// });
// },
//选择本地图片
uploadImg(e,num){
var file = e.target.files[0];
if(!/\.(gif|jpg|jpeg|png|bmp|GIF|JPG|PNG)$/.test(e.target.value)){
this.$message.error('图片类型必须是.gif,jpeg,jpg,png,bmp中的一种');
return false;
}
console.log(file.name);
this.fileName = file.name
//fileReader 接口,用于异步读取文件数据
var reader = new FileReader();
reader.readAsDataURL(file); //重要 以dataURL形式读取文件
reader.onload = e => { // data = window.URL.createObjectURL(new Blob([e.target.result])) 转化为blob格式 let data = e.target.result
console.log(data)
this.attach.customaryUrl=data
// 转化为base64
// reader.readAsDataURL(file)
// 转化为blob
}
},
//确认截图,上传
cut(type){
var formData = new FormData(); this.$refs.cropper.getCropBlob(res=>{
//res是裁剪后图片的bolb对象
console.log(res)
formData.append("file",res,this.fileName);
console.log(formData.append("file",res,this.fileName))
this.$http.post('XXXXX.upload',formData,
{contentType: false, processData: false, headers:{'Content-Type': 'multipart/form-data'}}
).then(res=>{
console.log(res)
})
})
}
}
}
</script> <style scoped>
/* 弹性布局 水平居中 */
.show-preview{
width: 375px;
height: 190px;
display: flex;
justify-content: center;
/* border:1px solid #cccccc; */
margin: 0 auto;
background: #f2f2f2;
} .preview{
overflow: hidden;
box-shadow: 0 0 2px 1px #666;
background: #cccccc;
}
.footerBtn{
display: flex;
justify-content: center;
margin-top: 15px;
} </style>
<style>
.el-dialog__body{
padding: 0px 60px 30px 60px !important;
z-index: 9999999;
}
.el-dialog__header {
padding: 10px;
}
.el-button--medium {
padding: 11px 36px;
margin-right: 20px;
font-size: 14px;
border-radius: 4px;
}
</style>

更多参考链接:https://blog.csdn.net/weixin_39327044/article/details/89765109

       https://www.jianshu.com/p/c24ca59aaf1a

       https://blog.csdn.net/qq_37622575/article/details/84989424

vue-cropper裁剪上传的更多相关文章

  1. 第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传

    第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传 实现原理 前台用cropper插件,将用户上传头像时裁剪图片的坐标和图片,传到逻辑处理 ...

  2. springMVC 头像裁剪上传并等比压

    第一次写头像裁剪上传,原本想着直接本地预览裁剪再上传,可是时间有限,jquery.jcrop貌似并没有对 假设是ie下图片预览效果是滤镜做的  做出对应处理,也没有时间去改;仅仅好将就一下先把图片上传 ...

  3. vue 阿里云上传组件

    vue 阿里云上传组件 Vue.js上传图片到阿里云OSS存储 测试项目git地址 本测试项目启动方法 示例链接 组件配置项 实践解释 本文主要介绍如何 在vue项目中使用web 直传方式上传阿里云o ...

  4. vue中el-upload上传多图片且携带参数,批量而不是一张一张的解决方案

    现在前端基本不是vue技术栈就是react技术栈. vue技术栈最常用的就是element-ui的ui框架了. 在项目中,我们经常会碰到这种需求:批量上传文件 element-ui 确实也为我们提供了 ...

  5. PHP+jQuery.photoClip.js支持手势的图片裁剪上传实例

    PHP+jQuery.photoClip.js支持手势的图片裁剪上传实例,在手机上双指捏合为缩放,双指旋转可根据旋转方向每次旋转90度,在电脑上鼠标滚轮为缩放,双击则顺时针旋转90度. 下面让我们来看 ...

  6. 图片裁剪 cropper.js 上传组件封装 vue

    //HTML cropper.js 文档地址: https://github.com/fengyuanchen/cropperjs/blob/master/README.md <template ...

  7. Vue实现用户自定义上传头像裁剪

    使用技术: vue.js2.0.cropperjs.canvas <template>   <div id="app">     <div id=&q ...

  8. 图片裁剪(cropper)后上传问题

    最近工作需要处理头像裁剪以及上传,研究了几天,写点心得,提醒自己记住踩过的坑,能帮助别人当然更好. 功能基本就是这样: 这里需要注意的是:拿到需求后,不要急于直接上手,花费半个小时,甚至更长时间缕清整 ...

  9. vue中使用cropperjs进行图片裁剪上传

    下面代码直接就可以复制使用了,但是需要在本地下个cropperjs,下载命令:npm install cropperjs --save-dev <template> <div id= ...

  10. mui+vue+photoclip做APP头像裁剪上传

    做APP由于项目需要,需要做用户头像上传的功能,头像上传包括拍照和相册选择图片进行上传,这里使用的技术是mui封装的plus,在进行图片裁剪的时候,使用的是photoclip来进行裁剪,由于个人在使用 ...

随机推荐

  1. PHP底层运行原理简括

    PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现包含大量组件模块的软件框架.是一个强大的UI框架. 简言之:PHP动态语言执行过程:拿到一段代码后,经过词法解析.语法解析等阶段后 ...

  2. jsplumbWithVue实现流程编排

    最近业务需求,通过拖拽,实现流程编排,包括编排元素中的各种属性,刚开始拿到这个需求,一头雾水啊,找度娘渡了好久,FQ翻了很久,各种博客CSDN搜索,最终技术选型还是定在了jsplumb,这要感谢@萌级 ...

  3. 17 数组 Arrays类

    Arrays类 概念 数组的工具类java.util.Arrays 由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作 ...

  4. CF772D题解

    什么阴间十进制状压 题意:给定 $ n $ 数字,求定义函数 $ G(x) $ 能够表示 满足"十进制按位与为 $ x $"的集合的平方和之和乘上 \(x\),求 \(\bigop ...

  5. Mybatis的ResultMap对column和property

    首先,先看看这张图,看能不能一下看明白:   select元素有很多属性(这里说用的比较多的): id:命名空间唯一标识,可以被用来引用这条语句 parameterType:将会传入这条语句的参数类的 ...

  6. js中的函数嵌套和闭包

    小编已经有一段时间没有更新文章了,最近一直在考虑接下来要更新什么内容.接下来,小编会围绕以下三个方面更新文章.实际项目中遇到的问题和解决方案.Vue源码解析.代码重构.关于数据可视化.小编也会按照这个 ...

  7. 消息中间件-RabbitMq相关概念及原理介绍【图文并茂】

    消息中间件 消息中间件的作用 解耦:消息中间件在服务之间插入了一个隐含的.基于数据的接口层.两边的服务处理过程都要实现这一接口,这允许我们独立的扩展或修改两边的处理过程,只要确保他们遵守相同的规范约束 ...

  8. 学习SpringMVC必知必会(3)~springmvc的请求和响应

    一.处理器方法响应处理 ▷ Controller方法该怎么返回.Controller数据该怎么进行共享 返回void/ModelAndView/String 1.Controller方法返回void ...

  9. windows配置jdk环境变量、mysql环境变量、tomcat环境变量、maven环境变量、git环境变量、node环境变量

    一.windows配置各种环境变量后 path 路径下的目录: 二.windows 配置各种环境变量的目的: 为windows系统添加上各种环境对应的命令 举例,为什么要添加jdk的bin目录,是因为 ...

  10. 如何进行Hibernate的性能优化?

    大体上,对于HIBERNATE性能调优的主要考虑点如下: l 数据库设计调整 l HQL优化 l API的正确使用(如根据不同的业务类型选用不同的集合及查询API) l 主配置参数(日志,查询缓存,f ...