使用vue3实现一个图片裁剪的功能

要实现图片裁剪功能,首先需要引入需要的依赖:

import { ref, onMounted, onUnmounted } from 'vue'; // 引入 ref、onMounted、onUnmounted
import Cropper from 'cropperjs'; // 引入Cropper插件
import 'cropperjs/dist/cropper.css'; // 引入Cropper插件的样式文件

然后在组件中定义变量和方法:

<script>
export default {
  // props定义
  props: {
    imgSrc: {
      type: String,
      required: true
    },
    cropperOptions: {
      type: Object,
      default () {
        return {}
      }
    },
    outputType: {
      type: String,
      default: 'jpeg'
    }
  },
  setup (props) {
    const cropper = ref(null) // 定义裁剪插件
    const img = ref(null) // 定义图片

    // 定义成功函数
    const handleLoad = () => {
      // 创建裁剪对象
      cropper.value = new Cropper(img.value, {
        viewMode: 1,
        aspectRatio: 1 / 1,
        preview: '.preview-img',
        ...props.cropperOptions
      })
    }

    // 定义销毁函数
    const handleDestroy = () => {
      if (cropper.value) {
        cropper.value.destroy() // 销毁对象
        cropper.value = null
      }
    }

    // 定义输出函数
    const handleOutput = () => {
      if (cropper.value) {
        const canvas = cropper.value.getCroppedCanvas() // 获取裁剪后的数据
        canvas.toBlob((blob) => {
          const fileReader = new FileReader()
          fileReader.readAsDataURL(blob) // 使用DataURL格式输出
          fileReader.addEventListener('load', () => {
            console.log(fileReader.result) // 输出Base64数据
          })
        }, `image/${props.outputType}`)
      }
    }

    onMounted(() => {
      img.value = document.getElementById('img') // 获取图片对象
      img.value.addEventListener('load', handleLoad) // 加载图片
    })

    onUnmounted(() => {
      handleDestroy() // 组件销毁时销毁对象
    })

    return {
      handleOutput
    }
  }
}
</script>

最后在模板中引用组件的代码如下:

<template>
  <div class="cropper">
    <img :src="imgSrc" ref="img" id="img">
    <div class="text-center mb-2">
      <button class="btn btn-primary btn-sm" @click="handleOutput">确认裁剪</button>
    </div>
    <div class="preview-img" style="width: 100%;height: 100%"></div>
  </div>
</template>

这样就完成了一个图片裁剪的功能。使用时只需要传入图片地址和Cropper的配置参数即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值