Vue + vue-cropper裁切图片

实现: vue按比例裁剪图片

安装:npm i vue-cropper

全局引入:(main.js)

import VueCropper from 'vue-cropper'

Vue.use(VueCropper)

代码实例:

<div class="one-form-item">
        <el-upload
          class="avatar-uploader"
          action
          :auto-upload="false"
          :on-change="uploadFileMethodAnswer"
          :show-file-list="false"
          :multiple="true"
          :before-upload="beforeAvatarUpload"
        >
          <el-button class="uploader-button" type="primary">上传banner图</el-button>
          <span> (建议分辨率800*450)</span>
        </el-upload>
      </div>
<el-dialog title="图片剪裁(为确保剪切后图片的分辨率足够,请尽量不缩放剪切原图)" :visible.sync="dialogVisible" append-to-body width="70%" >
        <div class="cropper-content">
          <div class="cropper" >
            <vueCropper
              ref="cropper"
              :img="option.img"
              :outputSize="option.size"
              :outputType="option.outputType"
              :info="true"
              :full="option.full"
              :canMove="option.canMove"
              :canMoveBox="option.canMoveBox"
              :original="option.original"
              :autoCrop="option.autoCrop"
              :autoCropWidth="option.autoCropWidth"
              :autoCropHeight="option.autoCropHeight"
              :fixedBox="option.fixedBox"
              :fixed="option.fixed"
              :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>
    </el-dialog>

option配置:(参考网站)

https://www.npmjs.com/package/vue-cropper/v/0.4.7

https://github.com/fengyuanchen/cropperjs#options

option: {
        img: "",
        outputSize: 1, //剪切后的图片质量(0.1-1)
        full: false, //输出原图比例截图 props名full
        outputType: "png",
        canMove: true,
        original: false,
        canMoveBox: true,
        autoCrop: true,
        autoCropWidth: 868,
        autoCropHeight: 488,
        fixedBox: false,
        fixed: true,
        maxImgSize: 3000, // 图片最大像素
        fixedNumber: [16, 9]
      },

提交数据(js)

finish() {
      let _this = this;
      this.$refs.cropper.getCropBlob(data => {
        let base64Data = null;
        let a = new FileReader();
        a.onload = function(e) {
          base64Data = e.target.result;
          _this.loading = true;
          const formData = new FormData();
          formData.append("imageFile", base64Data);
          uploadImg({
            formData: formData
          })
            .then(res => {
                
            })
            .catch(() => {
              // this.$message.error('图片上传失败!');
            });
        };
        a.readAsDataURL(data);
      });
    },
.cropper-content {
  .cropper {
    width: auto;
    height: 500px!important;
  }
}