vue+element实现图片上传及裁剪功能


Posted in Javascript onJune 29, 2020

本文实例为大家分享了vue+element实现图片上传及裁剪的具体代码,供大家参考,具体内容如下

随便写的一个小demo 功能是没有任何问题 可能里面会有一些小细节没有优化 

1 、安装 vue-cropper

npm install vue-cropper

2、组件内使用

import { VueCropper } from 'vue-cropper' 
components: {
 VueCropper,
},

具体可见官网

demo

<template>
  <div>
    <h1>图片上传</h1>
    <div>
      <el-upload
        class="avatar-uploader"
        action="https://jsonplaceholder.typicode.com/posts/"
        :show-file-list="false"
        :on-success="handleAvatarSuccess"
        :before-upload="beforeAvatarUpload"
      >
      <img v-if="imageUrl" :src="imageUrl" class="avatar">
      <i v-else class="el-icon-plus avatar-uploader-icon"></i>
      </el-upload>
    </div>
    <el-dialog title="图片剪裁" :visible.sync="dialogVisible" append-to-body>
      <div class="cropper-content">
        <div class="cropper" style="text-align:center">
          <vueCropper
            ref="cropper"
            :img="option.img"
            :outputSize="option.outputSize"
            :outputType="option.outputType"
            :info="option.info"
            :canScale="option.canScale"
            :autoCrop="option.autoCrop"
            :autoCropWidth="option.autoCropWidth"
            :autoCropHeight="option.autoCropHeight"
            :fixed="option.fixed"
            :fixedBox="option.fixedBox"
            :fixedNumber="option.fixedNumber"
          ></vueCropper>
        </div>
      </div>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="finish" :loading="loading">确认</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import {VueCropper} from 'vue-cropper'
export default {
  components: {
    VueCropper
  },
  data(){
    return{
      imageUrl: '',
      dialogVisible: false,
      // 裁剪组件的基础配置option
      option: {
        img: '', // 裁剪图片的地址
        info: true, // 裁剪框的大小信息
        outputSize: 0.8, // 裁剪生成图片的质量
        outputType: 'jpeg', // 裁剪生成图片的格式
        canScale: false, // 图片是否允许滚轮缩放
        autoCrop: true, // 是否默认生成截图框
        autoCropWidth: 100, // 默认生成截图框宽度
        autoCropHeight: 100, // 默认生成截图框高度
        fixedBox: true, // 固定截图框大小 不允许改变
        fixed: true, // 是否开启截图框宽高固定比例
        fixedNumber: [1, 1], // 截图框的宽高比例
        full: true, // 是否输出原图比例的截图
        canMoveBox: false, // 截图框能否拖动
        original: false, // 上传图片按照原始比例渲染
        centerBox: false, // 截图框是否被限制在图片里面
        infoTrue: true, // true 为展示真实输出图片宽高 false 展示看到的截图框宽高
        canMove:true,
      },
      picsList: [], //页面显示的数组
      // 防止重复提交
      loading: false,
      fileinfo:{}
    }
  },
  methods: {
   handleAvatarSuccess(res, file,fileList) {
    //上传成功后将图片地址赋值给裁剪框显示图片
    this.$nextTick(() => {
      this.option.img = URL.createObjectURL(file.raw);
      this.fileinfo = res
      this.dialogVisible = true
    })
   },
   beforeAvatarUpload(file) {
    const isJPG = file.type === 'image/jpeg'||file.type==='image/png';
    const isLt2M = file.size / 1024 / 1024 < 2;
 
    if (!isJPG) {
     this.$message.error('上传头像图片只能是 JPG 格式!');
    }
    if (!isLt2M) {
     this.$message.error('上传头像图片大小不能超过 2MB!');
    }
    return isJPG && isLt2M;
   },
    finish() {
      this.$refs.cropper.getCropBlob((data) => {
        var fileName = 'goods' + this.fileinfo.uid
        this.loading = true
        //上传阿里云服务器
        //请求
      })
    }
  }
}
</script>
<style scoped>
  .avatar-uploader{
    background:red!important;
    width:150px;height:150px;
    text-align: center;
    line-height: 150px;
  }
  .el-icon-plus{
    width:150px;height:150px;font-size:30px;
  }
  .cropper-content{
    width:500px;height:500px;background: pink;
  }
  .cropper{
    width:500px;
    height:500px;
    background: yellow;
  }
</style>

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js下用层来实现select的title提示属性
Feb 23 Javascript
jQuery数据显示插件整合实现代码
Oct 24 Javascript
js数组Array sort方法使用深入分析
Feb 21 Javascript
javascript中的变量作用域以及变量提升详细介绍
Oct 24 Javascript
原生javascript实现拖动元素示例代码
Sep 01 Javascript
JavaScript中利用Array和Object实现Map的方法
Jul 27 Javascript
每天一篇javascript学习小结(Array数组)
Nov 11 Javascript
JavaScript如何动态创建table表格
Aug 02 Javascript
php基于redis处理session的方法
Mar 14 Javascript
vue之nextTick全面解析
May 17 Javascript
详解js的作用域、预解析机制
Feb 05 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
Aug 12 Javascript
vue实现匀速轮播效果
Jun 29 #Javascript
vant实现购物车功能
Jun 29 #Javascript
js实现随机点名器精简版
Jun 29 #Javascript
Node.js中出现未捕获异常的处理方法
Jun 29 #Javascript
在Vue中使用antv的示例代码
Jun 29 #Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
Jun 29 #Javascript
纯JS开发baguetteBox.js响应式画廊插件
Jun 28 #Javascript
You might like
adodb与adodb_lite之比较
2006/12/31 PHP
php2html php生成静态页函数
2008/12/08 PHP
php xml文件操作代码(一)
2009/03/20 PHP
php定时计划任务的实现方法详解
2013/06/06 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
javaScript中定义类或对象的五种方式总结
2016/12/04 Javascript
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
2018/01/09 Javascript
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
python使用webbrowser浏览指定url的方法
2015/04/04 Python
python获取本地计算机名字的方法
2015/04/29 Python
利用python实现命令行有道词典的方法示例
2017/01/31 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
机电专业大学生职业规划书范文
2014/02/25 职场文书
演讲比赛的活动方案
2014/08/28 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
个性发展自我评价2015
2015/03/09 职场文书
天气温馨提示语
2015/07/14 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
go select编译期的优化处理逻辑使用场景分析
2021/06/28 Golang