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 相关文章推荐
通过javascript设置css属性的代码
Dec 28 Javascript
Jquery乱码的一次解决过程 图解教程
Feb 20 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
Dec 10 Javascript
在Ubuntu上安装最新版本的Node.js
Jul 14 Javascript
JavaScript Math 对象常用方法总结
Apr 28 Javascript
JS封装的自动创建表格的实现代码
Jun 15 Javascript
AngularJS使用指令增强标准表单元素功能
Jul 01 Javascript
JavaScript 闭包机制详解及实例代码
Oct 10 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
Nov 09 Javascript
详解Jquery的事件操作和文档操作
Dec 19 Javascript
基于JavaScript实现图片剪切效果
Mar 07 Javascript
详解Vue-cli代理解决跨域问题
Sep 27 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
php自动加载机制的深入分析
2013/06/08 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
2014年最新推荐的10款 PHP 开发框架
2014/08/01 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
PHP多文件上传实例
2015/07/09 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
jQuery live
2009/05/15 Javascript
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
js编写简单的聊天室功能
2017/08/17 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
Vue用mixin合并重复代码的实现
2020/11/27 Vue.js
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
优秀干部获奖感言
2014/01/31 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
应届生求职信范文
2014/06/30 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
实习计划书范文
2015/01/16 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
APP界面设计技巧和注意事项
2022/04/29 杂记
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技