vue3中图片裁剪,可固定裁剪框比例

简介:

裁剪用的是vue-cropper插件,git地址:https://github.com/xyxiao001/vue-cropper
弹框用到了Element Plus,请npm install element-plus --save安装。

具体用法:

1、安装:npm install vue-cropper@next
2、组件内引入:

import { VueCropper } from "vue-cropper";
import "vue-cropper/dist/index.css";

3、封装组件myCropper.vue

<template>
  <el-button text @click="dialogVisible = true">打开弹框</el-button>
  <el-dialog v-model="dialogVisible" width="60%">
    <template #header>
      <div class="dialgo_title">上传背景</div>
    </template>
    <div class="cropper_box">
      <vue-cropper
        autoCrop
        :img="imgUrl"
        ref="cropper"
        centerBox
        :canMove="false"
        :canScale="false"
        :info="false"
        :enlarge="10"
        fixed
        :fixedNumber="fixedNumber"
      />
    </div>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="dialogVisible = false">取消</el-button>
        <el-button type="primary" @click="confirm"> 确定 </el-button>
      </span>
    </template>
  </el-dialog>
  <img class="cropper_url" :src="cropperUrl" alt="" />
</template>

<script setup>
import { ref } from "vue";
import { VueCropper } from "vue-cropper";
import "vue-cropper/dist/index.css";
import imgUrl from "@/assets/img/1.jpg"; //引入的本地图片

const dialogVisible = ref(true);
let cropper = ref(null);
let fixedNumber = ref([9, 16]);
let cropperUrl = ref(""); //截后的图

// 确定截图
function confirm() {
  cropper.value.startCrop();
  cropper.value.getCropData((data) => {
    console.log("这里的data是base64格式");
    dialogVisible.value = false;
    // cropperUrl.value = data;
    const image = new Image();
    image.src = data;
    image.onload = () => {
      const canvas = document.createElement("canvas");
      const ctx = canvas.getContext("2d");
      canvas.width = 900;
      canvas.height = 1600;
      ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
      const croppedImageSrc = canvas.toDataURL("image/png");
      cropperUrl.value = croppedImageSrc;
    };
  });
  // cropper.value.getCropBlob((data) => {
  //   console.log("这里的data是blob流格式");
  //   const image = new Image();
  //   image.src = URL.createObjectURL(data);
  //   image.onload = () => {
  //     const canvas = document.createElement("canvas");
  //     const ctx = canvas.getContext("2d");
  //     canvas.width = 900;
  //     canvas.height = 1600;
  //     ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
  //     const croppedImageSrc = canvas.toDataURL("image/png");
  //     cropperUrl.value = croppedImageSrc;
  //   };
  // });
}
</script>
<style lang="scss" scoped>
.dialgo_title {
  width: 100%;
  text-align: left;
  font-size: 18px;
  color: #333;
  font-family: SourceHanSansCN-Bold;
  font-weight: 700;
}
.cropper_box {
  width: 100%;
  height: 350px;
  margin: 0 auto;
}
.cropper_url {
  width: 200px;
  height: auto;
}
</style>
<style>
.el-dialog__footer {
  width: 100%;
  text-align: center !important;
}
</style>

4、父组件中引入:

<template>
  <div>
    <my-cropper></my-cropper>
  </div>
</template>
<script setup>
import MyCropper from "../components/myCropper.vue";
</script>

5、效果图:
在这里插入图片描述

注意:

插件的属性有详细的说明,https://shnhz.github.io/shn-ui/#/component/vue-cropper,我只用到了其中几个,具体根据自己业务进行选择。
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cropperjs是一个基于JavaScript图片裁剪工具,它可以让你在浏览器图片进行裁剪、缩放和旋转等操作。在Vue3使用cropperjs进行图片裁剪,可以通过以下步骤实现: 1. 安装cropperjs和vue-cropperjs 通过npm或yarn安装cropperjs和vue-cropperjs: ```bash npm install cropperjs vue-cropperjs --save ``` 2. 在Vue3组件引入vue-cropperjs 在你需要使用cropperjs的Vue3组件,引入vue-cropperjs: ```javascript import VueCropper from 'vue-cropperjs'; import 'cropperjs/dist/cropper.css'; export default { components: { VueCropper, }, data() { return { image: '', cropper: null, }; }, methods: { // 初始化cropper initCropper() { this.cropper = new Cropper(this.$refs.image, { aspectRatio: 1 / 1, // 裁剪宽高比 viewMode: 1, // 裁剪是否可以超出图片边界 }); }, // 获取裁剪后的图片 getCroppedImage() { const canvas = this.cropper.getCroppedCanvas(); const croppedImage = canvas.toDataURL('image/png'); console.log(croppedImage); }, }, mounted() { this.initCropper(); }, beforeDestroy() { this.cropper.destroy(); }, }; ``` 3. 在模板渲染图片裁剪 在模板,渲染图片裁剪: ```html <template> <div> <img ref="image" :src="image" /> <vue-cropper ref="cropper"></vue-cropper> <button @click="getCroppedImage">裁剪图片</button> </div> </template> ``` 4. 实现裁剪功能 在Vue3组件的methods实现裁剪功能,例如getCroppedImage方法: ```javascript // 获取裁剪后的图片 getCroppedImage() { const canvas = this.cropper.getCroppedCanvas(); const croppedImage = canvas.toDataURL('image/png'); console.log(croppedImage); }, ``` 通过以上四个步骤,在Vue3就可以使用cropperjs进行图片裁剪了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值