图片裁剪工具cropperjs

  cropperjs官网: Cropper.js

   html使用:

           后期更新      

 vue使用:

         下载:npm install cropperjs

          引用:

               import "cropperjs/dist/cropper.css";

               import Cropper from "cropperjs";

          使用:

//裁剪区域:
<img :src="ImageTempPath" alt="图片" class="image" ref="imgRef"crossorigin="anonymous"/>

//预览区域:
<img src="./no-seal-img.jpg" alt="" crossorigin="anonymous"/>

//操作区域:
<el-button type="primary" size="mini" @click="EditSeal('tailor')">裁剪</el-button>
<el-button type="primary" size="mini" @click="EditSeal('blowUp')">放大</el-button>
<el-button type="primary" size="mini" @click="EditSeal('reduce')">缩小</el-button>
<el-button type="primary" size="mini"@click="EditSeal('Leftrotate')">左旋转</el-button>
<el-button type="primary" size="mini"@click="EditSeal('Rightrotate')">右旋转</el-button>
<el-button type="primary" size="mini"@click="EditSeal('restore')">还原</el-button>

<script>
import "cropperjs/dist/cropper.css";
import Cropper from "cropperjs";
export default {
  name: "handleImg",
  data() {
    return {
      cropper: null,
       img: {},
      ImageTempPath:
        "https://tse2-mm.cn.bing.net/th/id/OIP-C.b7mT0r1Qe8Qe8hQVA-7npQHaHF?w=218&h=209&c=7&r=0&o=5&dpr=1.3&pid=1.7",
    };
  },
  mounted() {
    this.cropImage();
  },
  methods: {
    cropImage() {
      this.cropper = new Cropper(this.$refs.imgRef, {
        // aspectRatio: 1 / 1, // 裁剪框的默认比例
        preview: ".previewImg", // 预览视图
        viewMode: 1, //0 无限制 1 限制裁剪框不能超出图片的范围 2 限制裁剪框不能超出图片的范围 且图片填充模式为 cover 最长边填充3 限制裁剪框不能超出图片的范围 且图片填充模式为 contain 最短边填充
        autoCropArea: 0.65, // 0-1之间的数值,定义自动剪裁区域的大小,默认0.8
        resizable: true, // 是否允许改变裁剪框的大小
        scalable: true, //是否可以缩放图片,默认true
        restore: false, //窗口改变后 恢复被裁剪的区域 默认true
        dragMode: "none", // none禁止重新框选选取
        // cropBoxMovable: true, // 是否可以拖拽裁剪框 默认true
        // cropBoxResizable: true, // 是否可以改变裁剪框的尺寸 默认true
        // dragCrop: false, // 是否允许移除当前的剪裁框,并通过拖动来新建一个剪裁框区域
        // autoCrop: true, //允许初始化时自动的裁剪图片 配合 data 使用 默认true
        // movable: true, // 是否允许移动图片,默认true
        // zoomable: true, // 是否允许缩放图片大小,默认true
        // zoomOnTouch: true, //是否可以通过拖拽触摸缩放图片 默认true
        // zoomOnWheel: true, // 是否可以通过鼠标滚轮缩放图片 默认true
        // mouseWheelZoom: true, // 是否允许通过鼠标滚轮来缩放图片
        // touchDragZoom: true, // 是否允许通过触摸移动来缩放图片
        // wheelZoomRatio: 0.2, //设置鼠标滚轮缩放的灵敏度 默认 0.1
        // rotatable: true, // 是否允许旋转图片,默认true
        // modal: true, //是否显示图片和裁剪框之间的黑色蒙版 默认true
        // center: true, // 是否显示裁剪框中间的 ‘+’ 指示器 默认true
        // guides: true, // 是否显示裁剪框的虚线(九宫格)
        // highlight: true, // 是否显示裁剪框上面的白色蒙版 (很淡)默认true
        // background: true, //是否在容器内显示网格状的背景 默认true
        // dragMode: "none", // 禁止重新框选选取
        // toggleDragModeOnDblclick: true, //是否可以通过双击切换拖拽图片模式(move和crop)默认true 当拖拽图片模式为none时不可切换 该设置必须浏览器支持双击事件
        // responsive: true, //窗口改变后,重新渲染,默认true
        // restore: true, //窗口改变后 恢复被裁剪的区域 默认true
        // checkCrossOrigin: true, //检查图片是否跨域 默认true
        // checkOrientation: true, //检查图片的方向信息(仅JPEG图片有)默认true

        crop(event) {
          // console.log(event.detail.x);
          // console.log(event.detail.y);
          // console.log(event.detail.width);
          // console.log(event.detail.height);
          // console.log(event.detail.rotate);
          // console.log(event.detail.scaleX);
          // console.log(event.detail.scaleY);
        },
      });
      console.log(this.cropper);
    },

 EditSeal(method) {
      if (method) {
        switch (method) {
          case "tailor":
            this.tailor();
            break;
          case "blowUp":
            this.cropper.zoom(0.1);
            break;
          case "reduce":
            this.cropper.zoom(-0.1);
            break;
          case "Leftrotate":
            this.cropper.rotate(5);
            break;
          case "Rightrotate":
            this.cropper.rotate(-5);
            break;
          case "restore":
            this.cropper.reset();
            break;
        }
      }
    },
 tailor() {
      var result = this.cropper.getCroppedCanvas(); //获取裁剪后数据
      var base64url = result.toDataURL("image/jpeg");
      this.img.FileBase64 = base64url;

      var File = this.base64ToFile(base64url, " ");

      var blobURL = URL.createObjectURL(File);
      this.cropper.reset();              //重置数据
      this.cropper.replace(blobURL);     //更换当前图片为裁剪后的图片
      console.log(result, base64url, File, blobURL);
    },
    },
  },
};
</script>

猜你喜欢

转载自blog.csdn.net/weixin_53105591/article/details/131618078