vue2上传图片裁剪功能

一、效果展示

二、代码编写

代码总共分为4个部分

1、安装插件

npm install vue-cropper

        引入:在main.js中引入

import VueCropper from 'vue-cropper'
Vue.use(VueCropper)

2、template代码块

<!--上传代码的组件 去elementui中找自己想要的-->
<!--裁剪功能-->
   <div style="height: 300px ;width:500px;">
      <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"
            :fixedNumber="option.fixedNumber"
            :full="option.full"
            :fixedBox="option.fixedBox"
            :canMove="option.canMove"
            :canMoveBox="option.canMoveBox"
            :original="option.original"
            :centerBox="option.centerBox"
            :height="option.height"
            :infoTrue="option.infoTrue"
            :maxImgSize="option.maxImgSize"
            :enlarge="option.enlarge"
            :mode="option.mode"
            @realTime="realTime"
      ></vueCropper>
    </div>
    <!-- 功能区裁剪 -->
    <div>
      <el-button size="mini" type="danger" plain icon="el-icon-zoom-in" @click="changeScale(1)">放大</el-button>
          <el-button size="mini" type="danger" plain icon="el-icon-zoom-out" @click="changeScale(-1)">缩小</el-button>
          <el-button size="mini" type="danger" plain @click="rotateLeft">↺ 左旋转</el-button>
          <el-button size="mini" type="danger" plain @click="rotateRight">↻ 右旋转</el-button>
    </div>
    <el-button size="mini" type="danger" plain @click="uploadImg()">提交</el-button>
    <!--预览效果图-->
    <div class="show-preview">
      <div :style="previews.div" style="overflow: hidden;">
        <img :src="previews.url" :style="previews.img">
      </div>
    </div>

3、data区

   previews: {},
   option:{
      img: '',             //裁剪图片的地址
      outputSize: 1,       //裁剪生成图片的质量(可选0.1 - 1)
      outputType: 'png',  //裁剪生成图片的格式(jpeg || png || webp)
      info: true,          //图片大小信息
      canScale: true,      //图片是否允许滚轮缩放
      autoCrop: true,      //是否默认生成截图框
      autoCropWidth: 230,  //默认生成截图框宽度
      autoCropHeight: 150, //默认生成截图框高度
      fixed: false,         //是否开启截图框宽高固定比例
      fixedNumber: [1.53, 1], //截图框的宽高比例
      full: false,         //false按原比例裁切图片,不失真
      fixedBox: false,      //固定截图框大小,不允许改变
      canMove: false,      //上传图片是否可以移动
      canMoveBox: true,    //截图框能否拖动
      original: false,     //上传图片按照原始比例渲染
      centerBox: false,    //截图框是否被限制在图片里面
      height: true,        //是否按照设备的dpr 输出等比例图片
      infoTrue: false,     //true为展示真实输出图片宽高,false展示看到的截图框宽高
      maxImgSize: 3000,    //限制图片最大宽度和高度
      enlarge: 1,          //图片根据截图框输出比例倍数
      mode: '230px 150px'  //图片默认渲染方式
   },

4、methods方法

   //实时预览函数
    realTime (data) {
      this.previews = data
    },
    //图片缩放
    changeScale (num) {
      num = num || 1
      this.$refs.cropper.changeScale(num)
    },
    //向左旋转
    rotateLeft () {
      this.$refs.cropper.rotateLeft()
    },
    //向右旋转
    rotateRight () {
      this.$refs.cropper.rotateRight()
    },
    //上传图片
    uploadImg(){
        //获取截图的blob数据
        this.$refs.cropper.getCropBlob(async (data) => {
          console.log(data)
          //拿到的是blob类型的数据,需要其他形式需要转换
          let formData = new FormData();
          formData.append('file',data,"DX.jpg")
          //调用axios上传
          //上传逻辑
          axios({
             url: "你自己的上传图片路径",
             method: 'post',
             data: formData,
             headers: { 'Content-Type': 'multipart/form-data' }
           }).then(res => {
	       //添加到数据库时添加的是裁剪过的图片
               this.form.pic=res.data;
               this.$message({
                 message: '裁剪成功',
                 type: 'success'
               });
           })
        })
    },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘猫_A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值