vue-cropper的装置

npm install vue-cropper或yarn add vue-cropper

只须要一个图片地址和一个导出截取后图片的办法,vue-cropper在截取图片后会返回一个图片的base64数据。

<template>  <div class="cropper-content">    <div class="cropper-box">      <div class="cropper">        <vue-cropper          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"          @imgLoad="imgLoad"        >        </vue-cropper>      </div>      <!--底部操作工具按钮-->      <div class="footer-btn">        <div class="scope-btn">          <label class="btn" for="uploads">抉择封面</label>          <input            type="file"            id="uploads"            style="position: absolute; clip: rect(0 0 0 0)"            accept="image/png, image/jpeg, image/gif, image/jpg"            @change="selectImg($event)"          />          <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>        <div class="upload-btn">          <el-button size="mini" type="success" @click="uploadImg('blob')"            >上传封面 <i class="el-icon-upload"></i          ></el-button>        </div>      </div>    </div>    <!--预览效果图-->    <div class="show-preview">      <div :style="previews.div" class="preview">        <img :src="previews.url" :style="previews.img" />      </div>    </div>  </div></template><script>import { VueCropper } from 'vue-cropper';export default {  name: 'CropperImage',  components: {    VueCropper  },  props: ['Name'],  data() {    return {      name: this.Name,      previews: {},      option: {        img: '', //裁剪图片的地址        outputSize: 1, //裁剪生成图片的品质(可选0.1 - 1)        outputType: 'jpeg', //裁剪生成图片的格局(jpeg || png || webp)        info: true, //图片大小信息        canScale: true, //图片是否容许滚轮缩放        autoCrop: true, //是否默认生成截图框        autoCropWidth: 230, //默认生成截图框宽度        autoCropHeight: 150, //默认生成截图框高度        fixed: true, //是否开启截图框宽高固定比例        fixedNumber: [1.53, 1], //截图框的宽高比例        full: false, //false按原比例裁切图片,不失真        fixedBox: true, //固定截图框大小,不容许扭转        canMove: false, //上传图片是否能够挪动        canMoveBox: true, //截图框是否拖动        original: false, //上传图片依照原始比例渲染        centerBox: false, //截图框是否被限度在图片外面        height: true, //是否依照设施的dpr 输入等比例图片        infoTrue: false, //true为展现实在输入图片宽高,false展现看到的截图框宽高        maxImgSize: 3000, //限度图片最大宽度和高度        enlarge: 1, //图片依据截图框输入比例倍数        mode: '230px 150px' //图片默认渲染形式      }    };  },  methods: {    //初始化函数    imgLoad(msg) {      console.log('工具初始化函数=====' + msg);    },    //图片缩放    changeScale(num) {      num = num || 1;      this.$refs.cropper.changeScale(num);    },    //向左旋转    rotateLeft() {      this.$refs.cropper.rotateLeft();    },    //向右旋转    rotateRight() {      this.$refs.cropper.rotateRight();    },    //实时预览函数    realTime(data) {      this.previews = data;    },    //抉择图片    selectImg(e) {      let file = e.target.files[0];      if (!/\.(jpg|jpeg|png|JPG|PNG)$/.test(e.target.value)) {        this.$message({          message: '图片类型要求:jpeg、jpg、png',          type: 'error'        });        return false;      }      //转化为blob      let reader = new FileReader();      reader.onload = (e) => {        let data;        if (typeof e.target.result === 'object') {          data = window.URL.createObjectURL(new Blob([e.target.result]));        } else {          data = e.target.result;        }        // 赋值抉择图片的地址        this.option.img = data;      };      //转化为base64      reader.readAsDataURL(file);    },    //上传图片    uploadImg(type) {      let _this = this;      if (type === 'blob') {        //获取截图的blob数据        this.$refs.cropper.getCropBlob(async (data) => {          let formData = new FormData();        });      }    }  }};</script><style scoped lang="scss">.cropper-content {  display: flex;  display: -webkit-flex;  justify-content: flex-end;  .cropper-box {    flex: 1;    width: 100%;    .cropper {      width: auto;      height: 300px;    }  }  .show-preview {    flex: 1;    -webkit-flex: 1;    display: flex;    display: -webkit-flex;    justify-content: center;    .preview {      overflow: hidden;      border: 1px solid #67c23a;      background: #cccccc;    }  }}.footer-btn {  margin-top: 30px;  display: flex;  display: -webkit-flex;  justify-content: flex-end;  .scope-btn {    display: flex;    display: -webkit-flex;    justify-content: space-between;    padding-right: 10px;  }  .upload-btn {    flex: 1;    -webkit-flex: 1;    display: flex;    display: -webkit-flex;    justify-content: center;  }  .btn {    outline: none;    display: inline-block;    line-height: 1;    white-space: nowrap;    cursor: pointer;    -webkit-appearance: none;    text-align: center;    -webkit-box-sizing: border-box;    box-sizing: border-box;    outline: 0;    -webkit-transition: 0.1s;    transition: 0.1s;    font-weight: 500;    padding: 8px 15px;    font-size: 12px;    border-radius: 3px;    color: #fff;    background-color: #409eff;    border-color: #409eff;    margin-right: 10px;  }}</style>

预览效果图:

罕用api属性形容:

    img: '', //裁剪图片的地址    outputSize: 1, //裁剪生成图片的品质(可选0.1 - 1)    outputType: 'jpeg', //裁剪生成图片的格局(jpeg || png || webp)    info: true, //图片大小信息    canScale: true, //图片是否容许滚轮缩放    autoCrop: true, //是否默认生成截图框    autoCropWidth: 230, //默认生成截图框宽度    autoCropHeight: 150, //默认生成截图框高度    fixed: true, //是否开启截图框宽高固定比例    fixedNumber: [1.53, 1], //截图框的宽高比例    full: false, //false按原比例裁切图片,不失真    fixedBox: true, //固定截图框大小,不容许扭转    canMove: false, //上传图片是否能够挪动    canMoveBox: true, //截图框是否拖动    original: false, //上传图片依照原始比例渲染    centerBox: false, //截图框是否被限度在图片外面    height: true, //是否依照设施的dpr 输入等比例图片    infoTrue: false, //true为展现实在输入图片宽高,false展现看到的截图框宽高    maxImgSize: 3000, //限度图片最大宽度和高度    enlarge: 1, //图片依据截图框输入比例倍数    mode: '230px 150px' //图片默认渲染形式